@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)