1. 程式人生 > 實用技巧 >python類屬性‘類方法、靜態方法

python類屬性‘類方法、靜態方法

一. 類屬性

1. 類屬性

類屬性就是 類 所擁有的屬性,它被 該類的所有例項物件 所共有。
類屬性可以使用 類或 例項物件訪問。

說明:

1. 記錄的某項資料 始終保持一致時,則定義類屬性。
2. 例項屬性要求 每個物件為其 單獨開闢一份記憶體空間 來記錄資料,而 類屬性 為全類所共有 ,僅佔用一份記憶體,更加節省記憶體空間。

2. 類屬性的設定

class Dog(object):
    tooth = 10

dog = Dog()
print(Dog.tooth)    #類直接呼叫
print(dog.tooth)    #例項呼叫

說明:

類屬性類似於java的靜態變數

3. 類屬性的修改

類屬性的修改只能通過類修改,不能通過類的例項物件修改

class Dog(object):
    tooth = 10

dog = Dog()

Dog.tooth = 20
print(Dog.tooth)    # 20
print(dog.tooth)    # 20

dog.tooth = 30
print(Dog.tooth)    # 20
print(dog.tooth)    # 30

說明:

上面dog.tooth = 30 並沒有修改類屬性tooth,而是建立了一個與類屬性tooth同名的例項屬性

二. 類方法

用裝飾器`@classmethod`來標識的方法為類方法,對於類方法,第一個引數必須是類,一般以`cls`作為第一個引數。

class Dog(object):
    tooth = 10

    @classmethod
    def class_fn(cls):
        return cls.tooth


dog = Dog()

print(Dog.class_fn())   # 10   # 類直接呼叫類方法
print(dog.class_fn())   # 10   # 類的物件呼叫類方法

說明:引數cls代表當前類,呼叫方法時自動傳入

三. 靜態方法

通過裝飾器`@staticmethod`來進行修飾,靜態方法既不需要傳遞類也不需要傳遞例項物件作為引數(形參沒有self/cls)**。
靜態方法 也能夠通過 例項物件 和 類去訪問。

class Dog(object):
    tooth = 10

    @staticmethod
    def static_fn():
        return "靜態方法"


dog = Dog()

print(Dog.static_fn())   # 靜態方法   # 類直接呼叫靜態方法
print(dog.static_fn())   # 靜態方法   # 類的物件呼叫靜態方法

說明:

靜態物件中無法訪問類屬性