python的介面和繼承

2021-09-28 01:00:37 字數 1383 閱讀 5366

在**邏輯比較複雜時候,需要有一定的結構設計,這時就需要用到介面和類繼承。

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

pass

class b(a):

pass

子類b中呼叫a中方法:

(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...

繼承和介面

繼承和介面 一 抽象類 抽象類和介面的關係非常緊密,都必須有要實現的成員。它們最大的區別是由抽象類可以派生出一些成員的實現,但介面卻不包含任何成員的實現。當派生出的事物都屬於同乙個種類時,此時可用抽象類 當派生出的事物的功能要求完全不同的類物件時,就要用介面實現。抽象類要求至少有乙個抽象成員,抽象成...

繼承和介面

一 抽象類 抽象類和介面的關係非常緊密,都必須有要實現的成員。它們最大的區別是由抽象類可以派生出一些成員的實現,但介面卻不包含任何成員的實現。當派生出的事物都屬於同乙個種類時,此時可用抽象類 當派生出的事物的功能要求完全不同的類物件時,就要用介面實現。抽象類要求至少有乙個抽象成員,抽象成員就是在派生...