【发布时间】:2012-11-18 19:14:06
【问题描述】:
假设我有一个类NamedObject,它有一个属性name。现在,如果我必须使用 setter,我首先必须像这样定义一个 getter(我猜?):
class NamedObject:
def __init__(self, name):
self.name = name
@property
def name(self):
return self._name
现在我想知道,在 setter 内部,我应该使用 self._name 还是 self.name,getter 还是实际属性?设置名称时,I ofc。需要使用_name,但是当我进入二传手时呢?例如:
@name.setter
def name(self, value):
if self._name != str(value): # Or should I do 'if self.name != value' ?
self.doStuff(self._name) # Or doStuff(self.name) ?
self.doMoreStuff()
self._name = str(value)
使用哪一个真的很重要吗?为什么要使用一个而不是另一个?
【问题讨论】:
-
在 Python 中,您通常根本不使用 getter 和 setter。
-
为什么不呢?那它们为什么存在呢? O.o 我要求的每个人都告诉我使用它们,并且每个人都告诉我不要。
-
@Mahi 当你真正有 理由 使用它们时使用它们 - 例如。您想做的不仅仅是直接分配和读取属性的值(例如验证)。
-
您通常首先只使用实例属性,然后当您认为必须添加一些操作/控件来获取/设置时,您将其更改为属性,这样您就可以向后改进代码兼容的方式。添加不做任何事情的随机 getter/setter 只是编写更多代码,而没有提供任何类型的信息隐藏或功能。
-
@Amber 是的,对不起,这是我在那里提出的一个坏例子(主要帖子),但在我的实际代码中,我在 setter 上有 15 行代码,而在 getter 上只有一个.我应该使用 getter 和 setter 吗?
标签: python python-3.x getter-setter private-members