1. 程式人生 > >python學習日記(OOP——靜態方法和類方法)

python學習日記(OOP——靜態方法和類方法)

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)