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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM