Python装饰器abstractmethod、classmethod、staticmethod

@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是为类操作准备,是将类的实例化和其方法解耦,可以在不实例化的前提下调用某些类方法。两者的区别可以这么理解:类方法是将类本身作为操作对象,而静态方法是独立于类的一个单独函数,只是寄存在一个类名下。类方法可以用过类属性的一些初始化操作。
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)
-------------------------------------------------------------------------

猜你喜欢

转载自www.cnblogs.com/yimai-series/p/12124614.html