【问题标题】:More concise form to set a read-only `@property` in python在 python 中设置只读`@property`的更简洁的形式
【发布时间】:2016-04-24 19:34:29
【问题描述】:

我知道如果我想在 python 中设置一个只读属性,我可以在一个类中执行以下操作:

class Foo(object):

    @property
    def foo(self):
        return self._foo

但在我有许多像这个一样简单的属性的情况下,它似乎仍然太长(3/4 行)。

我知道我可以自己编写一个系统来创建只读属性,但我想避免重新发明轮子。

我想知道是否有特殊功能可以执行以下操作:

create_ro_property(self,"foo","_foo",42) # where 42 is the initial value of 42

这将创建一个只读属性foo,可以通过_foo在对象内部设置。

有什么想法吗?

【问题讨论】:

    标签: python properties decorator public python-decorators


    【解决方案1】:

    你可以这样做:

    class Foo(object):
    
        foo = property(lambda self: self._foo)
    

    @ 只是语法糖,lambda 可以替换这样一个微不足道的 def 来创建 getter。

    注意这并没有设置42的初始值;你仍然必须这样做,例如在__init__。或者,也许你可以在__getattr__ 中做一些聪明的事情来返回None 以获取以_ 开头的缺失属性,然后将返回值设为self._foo or 42(或者,如果0 是一个有效值,42 if self._foo is None else self._foo) .

    【讨论】:

      猜你喜欢
      • 2019-04-07
      • 1970-01-01
      • 2018-10-28
      • 1970-01-01
      • 1970-01-01
      • 2013-01-17
      • 1970-01-01
      • 1970-01-01
      • 2012-11-15
      相关资源
      最近更新 更多