使用'的好处是什么;获取函数';对于python类?

使用'的好处是什么;获取函数';对于python类?,python,class,getter-setter,Python,Class,Getter Setter,例如,在下面的代码中,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的人有时会这样做,因为他们已经习惯了。在P

例如,在下面的代码中,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需要一组可用的方法。

没有。它们在Python中是不必要的,被广泛推荐使用。

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

也许程序员将创建
节点的子类
,并且认为重写
getName
来做一些特殊的工作更容易(或者至少更明确)。只是一个想法


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

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

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

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

您是在实际代码中找到这个示例,还是在假设的示例中找到的?它在MITx 6.00x中的一个示例中,我在其他地方也看到过类似的情况。我想到了至少一个其他原因的可能重复:我看到很多人使用显式方法进行昂贵的操作,因为对于大多数人来说,一般的假设是直接访问“变量”不会带来高成本。如果你要查询世界另一端的某个网页,你可能想让它更明确。@Voo:没错,但这不是一个微不足道的getter/setter。正如我所说,使用getter/setter并不是毫无意义的,而是使用getter/setter仅仅获取/设置一个简单的底层属性是毫无意义的。如果他们真的有事情要做,那是完全有道理的。(如果你有一个简单的属性,然后你不得不改变它,让它在半个地球上查询一个网页……好吧,这看起来像是一种奇怪和不寻常的设计改变。)子类,如果他们想做类似于“覆盖
getName
”的事情的话可以简单地将
name
设置为属性:这允许子类在访问
name
时执行它需要的任何操作。它们不需要
getName()
方法。