例如,在下面的代码中,getName 函数有什么好处?
class Node(object):
def __init__(self, name):
self.name = str(name)
def getName(self):
return self.name
def __str__(self):
return self.name
例如,在下面的代码中,getName 函数有什么好处?
class Node(object):
def __init__(self, name):
self.name = str(name)
def getName(self):
return self.name
def __str__(self):
return self.name
没有任何好处。从其他语言(例如 Java)开始使用 Python 的人有时会这样做,因为他们已经习惯了。在 Python 中,创建这些类型的 getter 和 setter 是没有意义的,它们除了直接获取和设置底层变量之外什么都不做。 如果您以后需要做一些比获取/设置值更复杂的事情,属性允许您透明地交换逻辑。
使用 getter/setter 可能有好处,但在 Python 中,没有真正的理由使用琐碎的 getter/setter 而不是直接获取/设置属性。我能想到的唯一原因是,如果您必须保持与现有 API 的兼容性,该 API 需要一组可用的方法。
不要使用getter,直接访问类属性即可。通常 getter 用于访问私有/受保护的属性,但在 python 中没有这样的东西。使用 getter 的另一个原因是,您可以在返回值之前做一些工作,在您的情况下,您不会,但将来可能会改变,不用担心,到时候开始使用property
装饰器
@property
def name(self):
return self._name
你仍然会像这样访问它,就像myObject.name
直接访问它一样。
我希望生产代码使用@property
. 但是既然你问了,我会扔东西在那里。
也许程序员会创建子类,Node
并认为重写它更容易(或至少更明确)getName
来做一些特殊的工作。只是一个想法!
但总的来说,就像其他人所说的那样,这不是你通常会看到的。
没有。它们在 Python 中是不必要的,并且被广泛推荐反对。