这是Python继承中的错误吗?

时间:2013-02-25 12:48:08

标签: python inheritance language-features

我不确定此代码的输出是否正确或是否有错误:

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: []

有什么想法吗?

2 个答案:

答案 0 :(得分:2)

list_of_secrets的范围是这里的类。您希望将其附加到self

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

答案 1 :(得分:1)

您永远不会定义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