python – 是否可以重写子类中属性的getter?

例如:

class Example:
    def __init__(self):
        self.v = 0

    @property
    def value(self):
        return self.v
    @value.setter
    def value(self, v):
        self.v = v

class SubExample(Example):
    pass

是否有可能只在SubExample中重写getter值?

最佳答案 你可以这样做

class DoubleExample(Example):
    @Example.value.getter
    def value(self):
        return self.v * 2

o = Example()
o.value = 1
print o.value # prints "1"

p = DoubleExample()
p.value = 1
print p.value # prints "2"

但是,这仅适用于Example是一个新样式类(类Example(object):)而不是旧样式类(类Example :),因为它在您的示例代码中.

警告:Thomas在评论中指出,如果您使用多重继承(类Foo(Bar,Baz)),此方法可能无法按预期运行.

点赞