在**邏輯比較複雜時候,需要有一定的結構設計,這時就需要用到介面和類繼承。
python中使用abc模組來實現介面,繼承是python語言層次實現。
一、abc模組
1、抽象方法 abstractmethod
說明:一旦在抽象基類中定義了抽象方法,那麼繼承的子類必須重寫抽象方法。
2、虛擬子類 register,為什麼需要虛擬子類??
說明:虛擬子類不必繼承抽象基類的抽象方法。
二、父子類的整合
1、super:在子類中呼叫父類的方法
in [2]: super?示例如下:init signature: super(self, /, *args, **kwargs)
docstring:
super() -> same as super(__class__, )
super(type) -> unbound super object
super(type, obj) -> bound super object; requires isinstance(obj, type)
super(type, type2) -> bound super object; requires issubclass(type2, type)
typical use to call a cooperative superclass method:
class c(b):
def meth(self, arg):
super().meth(arg)
this works for class methods too:
class c(b):
@classmethod
def cmeth(cls, arg):
super().cmeth(arg)
type: type
class a(object):子類b中呼叫a中方法:pass
class b(a):
pass
(1) a.func_name(self)
(2) super().func_name()
(3) super(a, self).func_name()
(4) super(__class__, self).func_name()
1屬於未繫結方法, 2、3、4都屬於繫結方法,其中方法2在實際執行的時候,等價於方法3或者方法4.
未繫結方法:通過「父類a.func_name(self)」的方法,在子類b中呼叫父類a的方法。這時候func_name不會自動給函式中的self繫結引數,所以稱為「未繫結方法」。
2、-- 未完待續
python之路 繼承介面和多型
抽象類最好不要用多繼承,而介面類可以 新式類 廣度優先 經典類 深度優先 模擬支付介面 from abc import abcmeta,abstractmethod class payment metaclass abcmeta 元類 abstractmethod def pay self,moen...
繼承和介面
繼承和介面 一 抽象類 抽象類和介面的關係非常緊密,都必須有要實現的成員。它們最大的區別是由抽象類可以派生出一些成員的實現,但介面卻不包含任何成員的實現。當派生出的事物都屬於同乙個種類時,此時可用抽象類 當派生出的事物的功能要求完全不同的類物件時,就要用介面實現。抽象類要求至少有乙個抽象成員,抽象成...
繼承和介面
一 抽象類 抽象類和介面的關係非常緊密,都必須有要實現的成員。它們最大的區別是由抽象類可以派生出一些成員的實現,但介面卻不包含任何成員的實現。當派生出的事物都屬於同乙個種類時,此時可用抽象類 當派生出的事物的功能要求完全不同的類物件時,就要用介面實現。抽象類要求至少有乙個抽象成員,抽象成員就是在派生...