我希望子进程具有某些属性,但由于您不能强制子方法继承属性装饰器,我想至少断言子类的这些属性是类的属性。 / p>
这样的事情:
class Parent:
def __init__(self):
assert isinstance(self.foo, property)
def foo(self):
raise NotImplementedError
class Child(Parent):
def __init__(self):
super().__init__()
@property
def foo(self):
return 'bar'
但当然,在Parent.__init__()
运行时,self.foo
已成为'bar'
并且有AssertionError
。有没有办法实现我使用元类的目的?如果是这样,那么Parent
类是继承元类的类,而不是Child
吗?
答案 0 :(得分:0)
我找到了解决方案。我没有测试self.foo
是否属于属性,而是测试它是否不是绑定方法:
from inspect import ismethod
class Parent:
def __init__(self):
assert not ismethod(self.foo, property)
def foo(self):
raise NotImplementedError
这适用于大多数情况,但如果Child.foo
返回的属性本身就是绑定方法,则会失败。仍然可以获得更完整的答案。