@abstractmethod
用於程序接口的控制,正如上面的特性,含有@abstractmethod修飾的父類不能實例化,但是繼承的子類必須實現@abstractmethod裝飾的方法
from abc import ABC, abstractmethod class A(ABC): @abstractmethod def test(self): print("父類abstractmethod") pass class B(A): def test_1(self): print("未覆蓋父類abstractmethod") class C(A): def test(self): print("覆蓋父類abstractmethod") if __name__ == '__main__': #a = A() # 報錯 #b = B() # 報錯 c = C() # 正常 c.test()
@ classmethod,staticmethod
類方法classmethod和靜態方法staticmethod是為類操作准備,是將類的實例化和其方法解耦,可以在不實例化的前提下調用某些類方法。兩者的區別可以這么理解:類方法是將類本身作為操作對象,而靜態方法是獨立於類的一個單獨函數,只是寄存在一個類名下。類方法可以用過類屬性的一些初始化操作。
類方法classmethod和靜態方法staticmethod是為類操作准備,是將類的實例化和其方法解耦,可以在不實例化的前提下調用某些類方法。兩者的區別可以這么理解:類方法是將類本身作為操作對象,而靜態方法是獨立於類的一個單獨函數,只是寄存在一個類名下。類方法可以用過類屬性的一些初始化操作。
class Test: num = "aaaa" def __init__(self): self.number = 123 @classmethod def a(cls, n): cls.num = n print(cls.num) @classmethod def b(cls, n): cls.a(n) @classmethod def c(cls, n): cls.number = n @staticmethod def d(n): Test.b(n) test=Test() test.a(33) Test.a(44) Test.b(55) Test.c(22) Test.number Test.d(66) test.d(77)