没有getter的只读属性

时间:2017-12-08 02:29:13

标签: python oop

我正在阅读this link关于在Python中使用getter,引用:

  

Pythonic方式是不使用它们。如果你必须拥有它们然后隐藏   他们背后的财产。

同一页面包含各种示例,但我的问题是,如果getter不是Python方式,我如何向读取我的代码的人表明变量在构造之后应该是只读的。

假设我有以下课程:

class Car:
    def __init__(self, ID, name, tire, engine):
        self.ID = ID
        self.name = name
        self.tire = tire
        self.engine = engine

    def __str__(self):
        return "ID: {0} Name:{1} Tire: {2} Engine: {3}".format(self.ID, self.name, self.tire, self.engine)

如果我想在self.engine中设置后向其他开发者表​​明constructor是只读的,我该怎么做?在订单中,如果客户违反规则并尝试设置它,如果self.engine的实施发生变化(例如,从类Engine的对象更改为{{},则会出现问题1}})。

1 个答案:

答案 0 :(得分:2)

您可以使用@property装饰器,而不是定义一个setter来表示不应修改engine

class Car(object):
    def __init__(self, ID, name, tire, engine):
        self.ID = ID
        self.name = name
        self.tire = tire
        self._engine = engine

    def __str__(self):
        return "ID: {0} Name:{1} Tire: {2} Engine: {3}".format(self.ID, self.name, self.tire, self.engine)

    @property
    def engine(self):
        return self._engine

请注意,用户仍然可以浏览该属性并直接设置_engine

请注意,@property装饰器仅适用于新的样式类。

相关问题