Python属性getter有什么用处吗?

5

我在想,是否有必要显式地使用getter装饰器来访问类属性:

class A:
    @property
    def p(self):
       return self._p

    @p.setter
    def p(self, val):
       assert p < 1000
       self._p = val

    @p.getter
    def p(self):
       return self._p

我为什么需要在这里显式地使用getter呢?这不会使p(self)中的代码无法到达吗?基本上,有没有任何实际的原因需要使用它呢?


1
在你的特定情况下没有理由,但考虑一种更复杂的方法。即懒加载(例如,在第一次调用时生成返回值)。例如,对数据库进行懒连接。 - agg3l
我可以想象出这种用例,但似乎我可以将该代码放在p的@property定义下方,而无需显式地定义p.getter。 - sturgemeister
1个回答

4

当你从父类继承了一个属性并想要覆盖getter方法时,这将非常有用:

class Parent:
    @property
    def prop(self):
        return 'Parent'

    @prop.setter
    def prop(self, value):
        print('prop is now', value)


class Child(Parent):
    @Parent.prop.getter
    def prop(self):
        return 'Child'

这将创建Foo.prop的副本,其中包含不同的getter函数,但是具有相同的setter(和deleter)。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接