python之路--面向物件-成員
1. 成員
在類中你能寫的所有內容都是類的成員
class 類名: # 方法 def__init__(self, 引數1, 引數2...): # 屬性變數 self.屬性1 = 引數1 self.屬性2 = 引數2 ... # 方法 def method(self): pass
在上⾯程式碼中__init__和method都屬於類的成員⽅法. ⼜稱為例項⽅法. 總之這樣的東⻄
需要⽤物件來訪問. ⽽上⽅的self.屬性1 = 引數1 這個程式碼的含義是給物件設定屬性資訊. 含
義是這個物件的xxx屬性是xxxx. 這種東⻄⼜被稱之為成員變數或者例項變數, 再或者被稱之
為欄位. 都是⼀個意思.
2. 變數
1. 例項變數(欄位): 昨天寫的就是例項變數, 由物件去訪問的變數.
2. 類變數.(靜態變數) 此時. 這個變數屬於類. 但是物件也可以訪問.
先說什麼是例項變數. 說⽩了. 就是每個例項都應該擁有的變數. 比如. ⼈的名字, ⼈的愛好,
每個⼈的個⼈資訊. 都屬於例項變數. 那什麼是類變數. 就是這⼀類事物統⼀擁有的變數. 比
如. 在座的各位都是中國⼈. 那⼤家都擁有同⼀個國家. 例:
class Person: # 類變數, 表示所有的該類的物件都共享這個變數. country = "中國" def __init__(self, name, num, birthday): # 例項變數(欄位) 表示你建立的每一個人都有這三個變數 self.name = name self.num = num self.birthday = birthday p1 = Person("alex", 18, "1840年06⽉01⽇") print(p1.name) # alex print(p1.country) #中國 p2 = Person("wusir", 28, "1894年07⽉25⽇") print(p2.name) # wusir print(p2.country) # 中國
我們發現物件p1和p2的name都是物件⾃⼰的. 但是country是類的. ⼤家公⽤同⼀個變數.
如何來驗證呢?
Person.country = "⼤清" # 在這裡. 我把國家改成了大清 p1 = Person("alex", 18, "1840年06⽉01⽇") print(p1.name) print(p1.country) # alex是大清的 p2 = Person("wusir", 28, "1894年07⽉25⽇") print(p2.name) print(p2.country) # wusir也是大清的
簡單的總結一下:
例項變數,給物件用的.
類變數,多個物件共享的,最好是用類名來訪問,這樣更加規範.
3. 方法
1. 成員方法(例項方法) : 物件直接訪問的方法叫成員方法.
class Computer: # 例項⽅法(成員⽅法) def play(self): print("我的電腦可以玩⼉") c = Computer() c.play() # 物件直接去呼叫例項方法
2.靜態方法: 靜態方法不需要我們給方法傳遞self. 也就是說, 當出現一個方法不需要使用到成員變數的時候,就可以使用靜態方法,靜態方法需要我們在方法上面新增一個 @staticmethod
@staticmethod def fare(): print("我的電腦⾮常⽜B, 可以煎雞蛋")
3.類方法: 類⽅法和靜態⽅法差不多, 只不過類⽅法需要在引數列表中的第⼀個位置預留⼀個位置, 通常我們給第⼀個引數起名字叫cls. 類⽅法在被調⽤的時候也不需要傳遞例項物件.但是. 系統會⾃動的把類傳遞給第⼀個引數. 類⽅法在編寫的時候, 需要在類⽅法上⾯添
加@classmethod
class Computer: def play(self): print("我的電腦可以玩⼉") @staticmethod def fare(): print("我的電腦⾮常⽜B, 可以煎雞蛋") @classmethod def cal(cls, a, b): print(cls) return a+b print(Computer.cal(1, 2)) # 此時會自動的
4. 屬性
屬性其實就是通過⽅法改造過來的⼀種變數的寫法, 在⽅法上新增⼀個@property就可以了
class Person: def __init__(self): pass @property def age(self): return 1 p = Person() age = p.age print(age)
應用場景:我們一般儲存資料的時候不會儲存年齡,以為時間在邊年齡也在變,所以我們可以儲存出生日期,然後用程式來計算,而計算屬於一個功能,需要寫在方法裡,但是對於年齡這個屬性而言,他應該是一個數值,而不是動作,所以python就提供了這樣一種機制,通過方法來面熟一個屬性.
注意:
1. ⽅法引數只能有⼀個self
2. ⽅法上⽅要寫@property
3. 調⽤的時候, 我們不需要寫括號. 直接當成屬性變數來⽤就可以了.
4. 這種套路只能取值. 不能設定值