python-類-靜態屬性(數據屬性)、類方法、靜態方法

(介紹了三個裝飾器)

1.靜態屬性(數據屬性)

2.類方法

3.靜態方法

class A:

    name = '小明'   # 類A的數據屬性
    age = 2
    n = 1

    def __init__(self):
        self.name1 = 12

    def shuju(self):    # a = A()==> 調用:a.shuju()  類似 a.name
        print('我是類A的一個方法')

    @property   # 把類的函數屬性變爲數據屬性,也就是封裝成了數據屬性,在通過實例訪問時不用加括號
    def shuju1(self):       # a = A()==> 調用:a.shuju1  類似 a.name
        print('我被裝飾成了數據方法')
        return self.name,self.age

    # python 調用類中的函數方法時,需要先實例化,再通過self建立與方法的連接,從而調用
    # 如果只想執行類的方法,不想跟任何實例有捆綁,則可以用classmethod裝飾器
    # 表示裝飾器下面的方法是專門給類用的,實例不能用哦!

    @classmethod        # 不用實例化,直接通過類名調用裏面的方法:A.lei() #會自動把類本身傳給cls
    def lei(cls):   # cls 相當於A類的自身,就像實例化之後的self
        print(cls)
        print('----',cls.n)   # 等效於:A.n

    # @property :只與實例綁定,把類的方法變爲數據屬性,
    # @classmethod :只與類綁定
    # @staticmethod :不跟類綁定也不跟實例綁定。靜態方法  也叫類的工具包

    @staticmethod   # 可以用類調用:A.wash_body("小狗","小貓","小馬"); 也可以用實例調用:aa = A(); aa.wash_body("小狗","小貓","小馬")
    def wash_body(a, b, c):
        print("%s %s %s 正在洗澡" %(a, b, c))

總結:

@property :只與實例綁定(所以有:self代表實例自身),把類的方法變爲數據屬性

@classmethod :只與類綁定(所以有:cls代表類自身)

@staticmethod :不跟類綁定也不跟實例綁定(所有沒有默認參數)。
靜態方法只在內存中生成一個,節省開銷,(也叫類的工具包)

普通方法每個實例對象都擁有獨立的一個,開銷較大

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章