1.成員 在類中你能寫的所有內容都是類的成員 2.變數 1. 實例變數:昨天寫的就是實力變數,由對象去訪問的變數 2. 類變數: 這個變數屬於類.但是對象也可以訪問 實例變數 class Person: def __init__(self, name, id, gender, birth): sel ...
1.成員 在類中你能寫的所有內容都是類的成員 2.變數 1. 實例變數:昨天寫的就是實力變數,由對象去訪問的變數 2. 類變數: 這個變數屬於類.但是對象也可以訪問 實例變數 class Person: def __init__(self, name, id, gender, birth): self.name = name # 實例變數 對象里的變數 self.id = id self.gender = gender self.birth = birth p = Person("wusir", "10086", "不詳", "1900-12-15") print(p.birth) p.birth = "1840-5-6" print(p.birth) # 實例變數一般使用 對象.屬性 print(p.name) 類變數 class Person: country = "大清" def __init__(self, name, gender): self.name = name self.gender = gender p = Person("武sir", "未知") p2 = Person("太白", "兩性") Person.country = "中國" # 類變數最好是使用類名來訪問 # p.country = "大清" # 大坑::沒有修改類變數 # p2.country = "大明" print(p.country) # 類變數可以給對象使用 print(p2.country) # 類變數可以給對象使用 3.方法 1.實例方法:昨天寫的就是實例方法. 使用 對象.方法() 特點: 在聲明的時候. 需要給出self,self必須放在第一格位置 . 在調用的時候. 自動的會把對象那個傳遞給形參的self 2.類方法(@classmethod): 類方法是屬於類的. 特點: 在聲明的時候需要給出一個能夠接受類名的參數, cls, 也必須放在參數的第一個 在調用的時候. 自動的把xx對象的類傳遞給cls 3. 靜態方法(@staticmethod): 靜態方法也是屬於類的. 靜態方法就好比,我們在類中定義了一個函數 靜態方法一般和類方法差不多. 使用類名去訪問 實例方法 class Computer: # 實例方法 def play(self): print("電腦可以掃雷") # 在定義實例方法的時候. 必須給出一個參數 self # 形參的第一個參數, 自動的把對象給傳遞進來 def work(self): # self 是當前類的對象 print(self) print("電腦用來工作") c = Computer() c.work() # 調用的時候不需要手動給出self print(c) 類方法 class Person: # 實例方法 def chi(self): print("人會吃") @classmethod # 裝飾器, 此時這個方法是一個類方法 def he(cls): # 此時接收到的cls是類名 # print(cls) print("人會喝") # 用對象訪問 # p = Person() # p.he() # 在調用類方法的時候. 預設的把類名傳遞給類方法 # print(Person) # 類方法一般用類名去訪問 Person.he() # 類方法 靜態方法 class Person: @staticmethod # 靜態方法 def yue(): print("fsadf") # 靜態方法可以使用對象訪問. 也可以使用類名訪問. 但是一般推薦使用類名訪問 p = Person() p.yue() # 推薦使用類名訪問 Person.yue() 4.屬性 在方法上添加一個@property. 可以吧一個方法變成一個屬性.單數這個屬性不可以被賦值 當我們某一個屬性必須經過計算才能得到結果的時候使用 class Person: def __init__(self, name, gender, birth): self.name = name self.gender = gender self.birth = birth # 2000 2018 # 年齡 -> 應該是算出來的. 而不是直接存儲 @property # 把一個方法更改成一個屬性, 每次拿屬性的時候都會自動的去執行這個方法 # 方法的返回值就是屬性值 def age(self): # 實例方法 print("我是方法") return 2018 - self.birth p1 = Person("武sir", "未知", 2000) print(p1.age) # 看著像一個變數一樣使用, 實際上這裡是調用的一個方法 print(p1.age) # p1.age = 26 # 不可以的, 因為age是一個方法. 不是一個變數 5.私有 所有以雙下劃綫開頭的放馬,變數都是私有內容. 外界無法訪問. 除非你主動暴露這些內容 class Person: __qie = "潘潘" # 類變數 def __init__(self, name, mimi): self.name = name self.__mimi = mimi # 私有內容 實例變數 def gaosu(self): print(f"把秘密告訴了太白, 第二天所有人都知道了{self.__mimi}") print(Person.__qie) # 私有的類變數只能在類中調用 # return self.__mimi def __yue(self): # 私有的實例方法 print("我要和寶寶約") @staticmethod def __koujiao(): print("韓志遠希望和嫂子一起摳腳") @classmethod def __fangqi(cls): print("和嫂子一起放氣") p = Person("wusir", "和嫂子的故事") # print(p.__mimi) # 私有的內容只能在類裡面調用 p.gaosu() print(Person.__qie) p = Person("wusir", "嫂子的故事") p.__yue() Person.__koujiao()