【问题标题】:What is the benefit to using a 'get function' for a python class? [closed]对 python 类使用“get 函数”有什么好处? [关闭]
【发布时间】:2012-11-30 21:30:31
【问题描述】:

比如下面的代码,getName函数有什么好处?

class Node(object):
    def __init__(self, name):
        self.name = str(name)
    def getName(self):
        return self.name
    def __str__(self):
        return self.name

【问题讨论】:

  • 你是在真实代码中找到这个例子还是假设的例子?
  • 这是 MITx 6.00x 的一个例子,我在其他地方也看到过类似的东西。

标签: python class getter-setter


【解决方案1】:

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

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

【讨论】:

  • 我想到了至少另一个原因:我看到很多人使用显式方法进行昂贵的操作,因为对于大多数人来说,一般假设是直接访问“变量”不会相关的高成本。如果您必须查询地球另一端的某个网页,您可能需要更明确地说明这一点。
  • @Voo:没错,但这不是一个微不足道的 getter/setter。就像我说的,并不是使用 getter/setter 没有意义,而是使用它们只是为了获取/设置一个简单的底层属性 是没有意义的。如果他们真的有事情要做,那是完全有道理的。 (如果你有一些东西,一开始是一个简单的属性,然后你必须改变它,让它查询半个地球的网页......好吧,这似乎是一种奇怪和不寻常的设计改变。)
【解决方案2】:

没有。它们在 Python 中是不必要的,并且被广泛推荐反对。

【讨论】:

    【解决方案3】:

    我希望生产代码使用@property。不过既然你问了,那我就扔东西了。

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

    但总的来说,就像其他人所说的那样,这不是您通常会看到的。

    【讨论】:

    • 子类,如果他们想做类似于“覆盖getName”的事情,可以简单地使name 成为一个属性:这允许子类在访问name 时做任何它需要的事情。他们不需要getName() 方法。
    【解决方案4】:

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

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

    你仍然会像这样访问它,myObject.name,就像直接访问它一样。

    【讨论】:

      猜你喜欢
      • 2010-09-12
      • 1970-01-01
      • 2011-04-26
      • 1970-01-01
      • 1970-01-01
      • 2010-10-02
      • 2015-03-24
      • 2012-09-04
      • 1970-01-01
      相关资源
      最近更新 更多