例如,在下面的代码中,getname函数有什么好处?


class Node(object):
def __init__(self, name):
self.name = str(name)
def getName(self):
return self.name
def __str__(self):
return self.name

您是在真正的代码中发现这个示例还是假设的示例?

在MITX6.00X中有一个例子,我在其他地方也看到过类似的情况。

python@property可能与getter和setter重复

没有好处。从其他语言(例如Java)到Python的人有时会这样做,因为他们习惯了。在Python中,没有必要创建这些类型的getter和setter,它们除了直接获取和设置底层变量之外什么都不做。属性允许您在以后需要执行比获取/设置值更复杂的操作时透明地交换逻辑。

使用getter/setter可能有好处,但在Python中,没有真正的理由使用普通的getter/setter,而不只是直接获取/设置属性。我能想到的唯一原因是,如果您必须与一个现有的API保持兼容性,而这个API需要一组特定的方法可用。

至少还有一个原因让我想到:我见过很多人使用显式方法进行昂贵的操作,因为对于大多数人来说,一般的假设是直接访问一个"变量"不会有很高的成本关联。如果你必须在世界的半路上查询一些网页,你可能会想让这更明确。

@VOO:没错,但那不是一个微不足道的能手/二传手。正如我所说,使用getter/setter并不是没有意义的,而是使用它们来获取/设置一个简单的底层属性是没有意义的。如果他们真的有事情要做,那就完全有道理了。(如果你有一个简单的属性开始的东西,然后你必须改变它,这样它就可以在这个世界的中途查询一个网页。…嗯,这看起来像是一种奇怪的、不寻常的设计变更。)

不要使用getter,只需直接访问class属性。通常getter用于访问私有/受保护的属性,但在Python中没有这样的属性。使用getter的另一个原因是,您可以在返回值之前做一些工作,在您的情况下,您可以不做,但这可能会在将来发生变化,不用担心,当时间到来时,只需开始使用property装饰器。


@property
def name(self):
return self._name

您仍然可以这样访问它,myObject.name,与直接访问它相同。

我希望生产代码使用@property。但既然你问了,我就扔东西出去。

也许程序员会制作Node的子类,并认为重写getName来做一些特殊的工作更容易(至少更明确)。只是一个想法!

但总的来说,正如其他人所说,这不是你通常会看到的。

子类,如果他们想做类似于"重写getName的事情,可以简单地使name成为一个属性:这允许子类在访问name时做任何它需要的事情。他们不需要使用getName()方法。

没有了。它们在python中是不必要的,并且被广泛建议不要使用。