1. 程式人生 > >python面向對象之成員

python面向對象之成員

code 聲明 函數 兩個 method 公開 init property 結果

成員
在類中寫的所有內容都是類的成員

變量
實例變量: 由對象去訪問的變量

class Person:
    def __init__(self,name,birth):
        self.name = name         # 實例變量,對象裏的變量(對象.屬性)
        self.birth = birth
p = Person(bob,1900)
print(p.name)
print(p.birth)
p.birth = 1937
print(p.birth)
結果
bob
1900
1937

類變量: 變量屬於類,但是對象也可以訪問

class Person:
    country 
= 中國 def __init__(self,name,birth): self.name = name self.birth = birth p = Person(bob,1937) p2 = Person(jack,2000) print(p.country) print(p2.country) p.country = 法國 print(p.country) print(p2.country) Person.country = 美國 # 類變量最好是使用類名來訪問 print(p.country) # 類變量可以給對象使用
print(p2.country) 結果 中國 中國 法國 中國 法國 美國

方法
實例方法: 使用 對象.方法()
特點: 在聲明的時候,需要給出self,self必須放在第一個位置,在調用的時候,自動的會把對象傳遞給形參的self

class Person:
    def chi(self):      #chi實例方法
        print(吃飯)
在定義實例方法的時候,必須給出一個參數 self
形參的第一個參數,自動的把對象給傳遞進來
    def he(self):   #self是當前類的對象
        print(self)
        print(
喝水) p = Person() p.he()     #調用的時候不需要手動給出self print(p) 結果 <__main__.Person object at 0x000002289B6F72E8> 喝水 <__main__.Person object at 0x000002289B6F72E8>

類方法 @classmethod : 類方法是屬於類的
特點: 在聲明的時候需要給出一個能夠接受類名的參數 cls,也必須放在參數的第一個,在調用的時候,自動得把xx對象的類傳遞給cls

class Person:
    def chi(self):
        print(吃飯)
    @classmethod    #類方法
    def he(cls):    # 接收到的cls是類名
        print(喝水)
p = Person()    #用對象訪問
p.he()          #在調用類方法的時候,默認的把類名傳遞給類方法
Person.he()     # 類方法一般用類名去訪問
結果
喝水
喝水

靜態方法@staticmethod: 靜態方法也是屬於類的,靜態方法就好比,我們在類中定義了一個函數,靜態方法一般和類方法差不多,使用類名去訪問

class Person:
    @staticmethod   #靜態方法
    def chi():
        print(吃飯)
p = Person          #靜態方法可以使用對象訪問,也可以使用類名訪問,但是一般推薦使用類名訪問
p.chi()
Person.chi()        #推薦使用類名訪問
結果
吃飯
吃飯

屬性
在方法上添加一個@property,可以把一個方法變成一個屬性,但是這個屬性不可以被賦值
當某一個屬性必須經過計算才能得到結果的時候用

class Person:
    def __init__(self,name,birth):
        self.name = name
        self.birth = birth
# 把一個方法更改成一個屬性,每次拿屬性的時候都會自動的去執行這個方法
# 方法的返回值就是屬性值
# 年齡,應該是算出來的,而不是直接存儲
    @property
    def age(self):      # 實例方法
        print(方法)
        return 2018 - self.birth
p1 = Person(bob,2000)
print(p1.age)    #看著像一個變量一樣使用,實際上這裏是調用的一個方法(方法不可修改)
結果
方法
18

私有
所有以雙下劃線開頭的方法,變量都是私有內容,外界無法訪問,除非你主動暴露這些內容

class Person:
    __he = 可樂
    def __init__(self,name,mimi):
        self.name = name
        self.__mimi = mimi  # 私有內容,實例變量
    def shuo(self):
        print(這個秘密是%s%self.__mimi)    #如果公開就能調用了
        print(Person.__he)  # 私有的類變量只能在類中調用
        return self.__mimi
    # 公開了__mimi和__he這個兩個私有變量
    
    def __wan(self):        # 私有的實例方法
        print(找劉麗玩)
    @staticmethod
    def __xiao():
        print(劉麗特別愛笑)
    @classmethod
    def __xue(cls):
        print(學習)
p = Person(bob,萬物皆空)
# print(Person.__he)    # 私有類變量只能在類裏面調用(在外調用報錯)
# print(p.__mimi)       # 私有的類屬性只能在類裏面調用(在外調用報錯)
# Person.__xiao()       # 私有的類方法只能在類裏面調用(在外調用報錯)
p.shuo()   
結果
這個秘密是萬物皆空
可樂

python面向對象之成員