【问题标题】:How to set a read-only @property in __init__如何在 __init__ 中设置只读的@property
【发布时间】:2019-04-07 14:30:25
【问题描述】:

我只是想知道如何使用只读属性并在__init__中设置初始值

我想要这样的东西: 在构造函数中设置的简单私有(python 启用隐私)变量。

class A:
    def __init__(self, value: int):
         self.value = value

    @property
    def value(self):
        return self.value

据我所知这是不可能的(无法设置值)?

【问题讨论】:

标签: python python-3.x properties


【解决方案1】:

函数是python中的一等公民。您的班级中不能有两个名称完全相同的成员。本质上,您的班级已经有一个 <class 'property'> 类型的 self.value,您的代码尝试将其设置为以 value 给出的整数,这是被禁止的 - 所以会弹出此错误。

绕过它:

class A:
    def __init__(self, value: int):
         self._value = value  # private backer

    @property
    def value(self):
        return self._value 

my_a = A(22)       # works, no error
print(my_a.value)  # 22

【讨论】:

  • 单下划线self._value在这里会是更好的选择。双下划线会调用名称修饰。
  • 不,不是。该功能旨在防止继承情况下的名称冲突,单下划线是“非公共 API”的正确约定。
猜你喜欢
  • 2016-04-24
  • 2017-09-02
  • 1970-01-01
  • 2014-09-15
  • 1970-01-01
  • 2011-04-25
  • 1970-01-01
  • 2014-05-15
  • 2015-08-03
相关资源
最近更新 更多