为python类使用'get function'有什么好处?

Chr*_*ris 7 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
Run Code Online (Sandbox Code Playgroud)

Bre*_*arn 18

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

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

  • 至少还有另外一个原因:我看到很多人使用显式方法进行昂贵的操作,因为对于大多数人来说,一般的假设是直接访问"变量"不会产生高成本.如果您需要在世界各地查询某个网页,您可能希望更明确地说明这一点. (4认同)

vik*_*kki 5

不使用 getter,直接访问类属性。通常 getter 用于访问私有/受保护的属性,但在 Python 中没有这样的东西。使用 getter 的另一个原因是您可以在返回值之前做一些工作。就你而言,你不是,但将来可能会改变,不用担心。到时候就开始使用property装饰器吧。

@property
def name(self):
    return self._name
Run Code Online (Sandbox Code Playgroud)

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