断言子属性是父类的属性

时间:2017-11-01 07:32:59

标签: python

我希望子进程具有某些属性,但由于您不能强制子方法继承属性装饰器,我想至少断言子类的这些属性是类的属性。 / 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吗?

1 个答案:

答案 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返回的属性本身就是绑定方法,则会失败。仍然可以获得更完整的答案。