在 python 中设置只读的 `@属性` 更简洁

More concise form to set a read-only `@property` in python

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

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.

在内部设置对象

有什么想法吗?

您可以按如下方式进行:

class Foo(object):

    foo = property(lambda self: self._foo)

@ 只是语法糖,lambda 可以代替如此琐碎的 def 来创建 getter。

请注意,这不会设置 42 的初始值;你仍然必须这样做,例如在 __init__。或者,也许你可以在 __getattr__ 到 return None 中做一些聪明的事情来弥补以 _ 开头的缺失属性,然后使 return 值 self._foo or 42 (或者,如果 0 是有效值,则 42 if self._foo is None else self._foo)。