gpt4 book ai didi

Python3 - 如何从现有抽象类定义抽象子类?

转载 作者:太空狗 更新时间:2023-10-30 00:34:13 28 4
gpt4 key购买 nike

我最初定义了以下抽象类:

from abc import ABC, abstractmethod    
class Primitive(ABC):

现在我想创建另一个继承自 Primitive 的抽象类:

class InstrumentName(Primitive)

我需要这个类是抽象的,因为我最终想创建以下两个具体类:

class CurrencyInstrumentName(InstrumentName)
class MetalInstrumentName(InstrumentName)

我已经阅读了文档并搜索了 SO,但它们主要涉及从抽象类子类化具体类,或者讨论 Python 如何处理抽象

最佳答案

只是子类化,你不需要做任何特别的事情。

只有当实现中不再有 abstractmethodabstractproperty 对象时,类才会变得具体。

让我们来说明一下:

from abc import ABC, abstractmethod    
class Primitive(ABC):
@abstractmethod
def foo(self):
pass

@abstractmethod
def bar(self):
pass

class InstrumentName(Primitive):
def foo(self):
return 'Foo implementation'

这里,InstrumentName仍然是抽象的,因为bar被保留为abstractmethod。您不能创建该子类的实例:

>>> InstrumentName()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: Can't instantiate abstract class InstrumentName with abstract methods bar

子类也可以根据需要添加@abstractmethod@abstractproperty方法。

在幕后,所有子类继承了强制执行此操作的ABCMeta 元类,它只是检查是否有任何@abstractmethod@abstractproperty 属性留在类上。

关于Python3 - 如何从现有抽象类定义抽象子类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48814211/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com