day 17 成員

楊洪濤發表於2018-12-20
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()
 

相關文章