from abc import ABC, abstractmethod
class A(ABC):
def __init__(self, name):
self.name = name
@abstractmethod
def something():
pass
class B(A):
pass
我對學習 OOP 還是個新手,所以我想問這個。我知道抽象類被認為是超類,但是抽象類也可以是子類嗎?
以代碼為例,B繼承自A但不覆寫中的抽象方法A,這是否意味著B仍然被視為抽象類以及 的子類A?
uj5u.com熱心網友回復:
首先,什么是抽象類?它是一個類,用作子類的“骨架”。現在回答你的問題......
那么這是否意味著 B 仍然被認為是一個抽象類以及 A 的子類?
是的,因為所有的方法都沒有被覆寫,而且它們是抽象的。
以這段代碼為例:
from abc import ABC, abstractmethod
class A(ABC):
@abstractmethod
def foo(self):
pass
@abstractmethod
def bar(self):
pass
class B(A):
def foo(self):
return 'Foo implementation'
在這里,該類B仍然是抽象的,因為其中一個方法沒有被抽象覆寫。因此,如果您嘗試創建它的實體,則會收到此錯誤:
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: Can't instantiate abstract class InstrumentName with abstract methods bar
在這里我們可以看到這個類繼承自A,但它是一個具體的類,因為方法被覆寫了:
class C(A):
def foo(self):
pass
def bar(self):
pass
c = C()
c.foo()
此代碼運行沒有錯誤。
簡而言之,只要方法沒有被覆寫,抽象類的子類仍然是抽象類。
uj5u.com熱心網友回復:
是的。只要您不覆寫所有抽象方法,子類仍然是抽象的。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/337517.html
上一篇:指向類方法的函式指標作為引數
