標籤:orb 分頁 @class comm tab 方法 防止 username eth
Python 類
物件導向編程是有效軟體編寫方法之一。
python程式編寫方法
- 1、函數編程,使用函數方式
- 2、物件導向編程,使用類方式
建立類
建立方法 構造方法,__init__(self,arg) obj = 類(‘a1‘) 普通方法 obj = 類(‘xxx’) obj.普通方法名()
格式如下:
class DataBaseHelper: def __init__(self, ip, port, username, pwd): self.ip = ip self.port = port self.username = username self.pwd = pwd def add(self,content): # 利用self中封裝的使用者名稱、密碼等 連結資料 print(‘content‘) # 關閉資料連結 def delete(self,content): # 利用self中封裝的使用者名稱、密碼等 連結資料 print(‘content‘) # 關閉資料連結 def update(self,content): # 利用self中封裝的使用者名稱、密碼等 連結資料 print(‘content‘) # 關閉資料連結 def get(self,content): # 利用self中封裝的使用者名稱、密碼等 連結資料 print(‘content‘) # 關閉資料連結 #封裝資料庫登陸IP,連接埠,使用者名稱,密碼 s1 = DataBaseHelper(‘1.1.1.1‘,3306, ‘jorbabe‘, ‘6666‘)
物件導向三大特性物件導向三大特性之一:封裝
使用構造方法封裝相同屬性:
def __init__(self, n,a): self.name = n self.age = a self.xue = ‘o‘ b1 = Bar(‘jorbabe‘, 18)b2 = Bar(‘yunlei‘, 19)
物件導向三大特性之二:繼承
1、繼承
class 父類: pass class 子類(父類): pass
2、重寫方法 防止執行父類中的方法
3、self永遠是執行改方法的調用者
4、
super(子類, self).父類中的方法(...)
父類名.父類中的方法(self,...)
5、Python中支援多繼承
- a. 左側優先
- b. 一條道走到黑
- c. 同一個根時,根最後執
物件導向三大特性之三:多態
python====> 原生多態,忽略多態,python傳參不用指定參數的類型。
v = ‘jorbabe‘def func(arg): print(arg) func(1) func(‘jorbabe‘)
類成員
class Foo: #靜態欄位,屬於類 country = ‘中國‘ def __init__(self, name,): # 普通欄位 self.name = name # 普通方法 def show(self): print(self.name)obj = Foo(‘jorbabe‘)obj.nameobj.show()
類成員: 欄位
- 普通欄位,儲存在對象中,執行只能通過對象訪問
- 靜態欄位,儲存在類中, 執行 可以通過對象訪問 也可以通過類訪問
方法
- 普通方法,儲存在類中,由對象來調用,self=》對象
普通方法 class Foo: def bar(self): print (‘bar‘) #推薦 obj = Foo() obj.bar() Foo.bar(obj)
#類方法 class Foo: def bar(self): print (‘bar‘) #靜態方法 @staticmethod def sta(): print (‘sta‘) #靜態方法+傳參 @staticmethod def stac(a1,a2): print (a1,a2) Foo.sta() Foo.stac(1,2) sta 1 2
- 類方法,儲存在類中,由類直接調用,cls=》當前類
#類方法 class Foo: def bar(self): print (‘bar‘) #靜態方法 @staticmethod def sta(): print (‘sta‘) #靜態方法+傳參 @staticmethod def stac(a1,a2): print (a1,a2) #類方法 @classmethod def classmd(cls): #cls:類名 print (cls) print (‘classmd‘) Foo.classmd() <class ‘__main__.Foo‘> classmd
應用情境:
- 如果對象中需要儲存一些值,執行某功能時,需要使用對象中的值 -> 普通方法
- 不需要任何對象中的值,靜態方法
屬性
class Foo: def __init__(self): self.name = ‘a‘ def bar(self): print (‘bar‘) #屬性或特性 @property def per(self): print (‘per‘) obj = Foo() # obj.per() obj.per
class Foo: def __init__(self): self.name = ‘a‘ def bar(self): print (‘bar‘) #屬性或特性。調用方式:obj.per @property def per(self): # print (‘per‘) return 1 #屬性傳參。調用方式:obj.per = 123 @per.setter def per(self,val): print (val) #屬性參數刪除。調用方式:del obj.per @per.deleter def per(self): print (‘666666‘) obj = Foo() # obj.per() obj.per r = obj.per print (r) obj.per = 123 del obj.per 1 123 666666
中國的所有省份,用物件導向知識表示?class Province: # 靜態欄位,屬於類 country = ‘中國‘ def __init__(self, name): # 普通欄位,屬於對象 self.name = name henan = Province(‘河南‘)henan.namehenan.name = "河南南"#hebei = Province(‘河北‘)# Province.countryprint (Province.country)print (henan.name)中國河南南
執行個體:利用屬性功能實現分頁
class Pargination: #定義頁碼 def __init__(self,current_page): #判斷是否是整數 try: p = int(current_page) except Exception as e: p = 1 #頁碼賦值 self.page = p #計算開始 @property def start(self): val = (self.page - 1) * 10 return val #計算結尾 @property def end(self): val = self.page * 10 return val#定義元組列表li = []#定義元組列表賦值for i in range(1000): li.append(i)while True: p = input (‘請輸入要查看的頁碼:‘) #給類的方法傳值 obj = Pargination(p) #類方法未添加屬性前的調用方式 # print (li[obj.start():obj.end()]) #方法添加屬性後的調用方式,去括弧 print (li[obj.start:obj.end])
請輸入要查看的頁碼:5[40, 41, 42, 43, 44, 45, 46, 47, 48, 49]請輸入要查看的頁碼:6[50, 51, 52, 53, 54, 55, 56, 57, 58, 59]請輸入要查看的頁碼:aa[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]請輸入要查看的頁碼:
Python學習(十一) Python 類