为Python类使用”get函数”有什么好处?

What is the benefit to using a 'get function' for a python class?

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

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

1
2
3
@property
def name(self):
    return self._name

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


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

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

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


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