【问题标题】:Is this a bug in Python inheritance? [duplicate]这是 Python 继承中的错误吗? [复制]
【发布时间】:2013-02-25 12:48:07
【问题描述】:

我不确定这段代码的输出是正确还是错误:

class F:
  """An abstract class"""
  list_of_secrets = []
  def __init__(self):
    pass

  def getSecret(self):
    return self.list_of_secrets

class F_None(F):
  pass

class F_Some(F):
  def __init__(self):
    self.list_of_secrets.append("secret value!")

x = F_Some()
print "x:",x.getSecret()

y = F_None()
print "y:",y.getSecret()

使用 python 2.7.3 的输出:

x: ['secret value!']

y: ['secret value!']

我认为它应该输出:

x: ['secret value!']

y: []

有什么想法吗?

【问题讨论】:

  • 我不确定它是否相同,因为不涉及继承。
  • 是一样的。它仍然是类属性,而不是实例属性。在这种情况下是父类,但仍然是完全相同的情况。
  • 回答问题:否。
  • @dbr:很好的欺骗目标,希望我能找到那个。 :-)

标签: python inheritance language-features


【解决方案1】:

list_of_secrets 的范围仅限于此处的类。您想将其附加到 self 中的 __init__

  def __init__(self):
      self.list_of_secrets = []

【讨论】:

    【解决方案2】:

    你永远不会定义self.list_of_secrets。你只定义F.list_of_secrets,这是完全不同的。改为这样做:

    class F:
      """An abstract class"""
      def __init__(self):
        self.list_of_secrets = []
    
      def getSecret(self):
        return self.list_of_secrets
    

    【讨论】:

      猜你喜欢
      • 2021-10-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-01-22
      • 1970-01-01
      • 1970-01-01
      • 2017-02-02
      • 2012-09-16
      相关资源
      最近更新 更多