我想使用一个抽象基类来强制实现一个具体类中的类属性。我知道如何使用@abc.abstractproperty
强制实现泛型属性。关于如何做到这一点,有很多答案-我已经阅读了其中的10个:)但是我想确保具体的类必须将抽象属性定义为类属性,而不是实例属性。有人知道怎么做吗?你知道吗
编辑以解决问题:
我有一些用户将从ABC中定义具体的类。某些抽象属性需要“具体化”为类属性。检查需要在它们第一次实例化具体类时进行,而不是更早。理想情况下,如果他们错误地将抽象属性定义为实例属性,则会引发一个TypeError来标记他们的错误。你知道吗
关键是,对于具体类的所有实例,class属性的值应该相同。
我想我缺少了一些关于Python内部的知识,这些知识可以帮助我正确地解决这个问题。。。你知道吗
import abc
class MyABC(object):
__metaclass__ = abc.ABCMeta
@abc.abstractproperty
def foo():
return 'we never run this line'
# I want to enforce this kind of subclassing
class GoodConcrete(MyABC):
@classmethod
def foo(cls):
return 1 # value is the same for all class instances
# I want to forbid this kind of subclassing
class BadConcrete(MyABC):
def foo(self, val):
self.foo = val
目前没有回答
相关问题 更多 >
编程相关推荐