python學習日記(OOP——靜態方法和類方法)
阿新 • • 發佈:2018-12-29
classmethod
類方法在Python中使用比較少,類方法傳入的第一個引數為cls,是類本身。並且,類方法可以通過類直接呼叫,或通過例項直接呼叫。但無論哪種呼叫方式,最左側傳入的引數一定是類本身。
通常情況下,類方法使用@classmethod裝飾器來宣告
當這個方法的操作只涉及靜態屬性的時候 就應該使用@classmethod來裝飾這個方法
class Goods(object): __discount = 0.8#自定義商品折扣 def __init__(self,name,price): self.name = name self.__price = price @property def price(self): return self.__price*Goods.__discount @classmethod def set_discount(cls,value): cls.__discount = value apple = Goods('apple',5) print(apple.price) Goods.set_discount(0.5) #類直接呼叫 # apple.set_discount(0.1) #例項直接呼叫print(apple.price)
staticmethod
靜態方法是指類中無需例項參與即可呼叫的方法(不需要self引數),在呼叫過程中,無需將類例項化,直接在類之後使用.號運算子呼叫方法。
通常情況下,靜態方法使用@staticmethod裝飾器來宣告。
class Test(object): @staticmethod def message(): print('this is a message') Test.message() t = Test() t.message()
這裡需要注意的是,在Python 2 中,如果一個類的方法不需要self引數,必須宣告為靜態方法,即加上@staticmethod裝飾器,從而不帶例項呼叫它。
而在Python 3中,如果一個類的方法不需要self引數,不再需要宣告為靜態方法,但是這樣的話只能通過類去呼叫這個方法,如果使用例項呼叫這個方法會引發異常。
例項方法
例項方法,除靜態方法與類方法外,類的其他方法都屬於例項方法。
例項方法需要將類例項化後呼叫,如果使用類直接呼叫例項方法,需要顯式地將例項作為引數傳入。
最左側傳入的引數self,是例項本身。
class Test(object): def message(self): print('this is a message') if __name__ == '__main__': #使用例項呼叫例項方法 t = Test() t.message() #如果使用類直接呼叫例項方法,需要顯示地將例項作為引數傳入 Test.message(t)