我正在阅读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}})。
答案 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
装饰器仅适用于新的样式类。