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