gpt4 book ai didi

python - 如何创建抽象类属性(可能是只读的)

转载 作者:太空狗 更新时间:2023-10-30 01:05:35 26 4
gpt4 key购买 nike

我花了很多时间研究这个问题,但似乎没有一个答案符合我的意愿。

我有一个带有类属性的抽象类我希望每个子类都被强制实现

class AbstractFoo():
forceThis = 0

所以当我这样做的时候

class RealFoo(AbstractFoo):
pass

它抛出一个错误告诉我在我实现 forceThis 之前它无法创建类。

我该怎么做?

(我不希望该属性是只读的,但如果这是唯一的解决方案,我会接受。)

对于类方法,我发现我可以做到

from abc import ABCMeta, abstractmethod

class AbstractFoo(metaclass=ABCMeta):
@classmethod
@abstractmethod
def forceThis():
"""This must be implemented"""

这样

class RealFoo(AbstractFoo):
pass

至少抛出错误TypeError: Can't instantiate abstract class EZ with abstract methods forceThis

(虽然它不会强制 forceThis 成为类方法。)

如何让类属性弹出类似的错误?

最佳答案

您可以通过定义自己的元类来做到这一点。像这样的东西:

 class ForceMeta(type):
required = ['foo', 'bar']

def __new__(mcls, name, bases, namespace):
cls = super().__new__(mcls, name, bases, namespace)
for prop in mcls.required:
if not hasattr(cls, prop):
raise NotImplementedError('must define {}'.format(prop))
return cls

现在您可以将其用作您自己类的元类:

class RequiredClass(metaclass=ForceMeta):
foo = 1

这将引发错误“必须定义栏”。

关于python - 如何创建抽象类属性(可能是只读的),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43790040/

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