这是Python继承中的一个bug吗?

Is this a bug in Python inheritance?

本问题已经有最佳答案,请猛点这里访问。

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
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: []

有什么想法吗?


list_of_secrets的作用域是这里的类。你想把它附在__init__中的self上。

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

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

1
2
3
4
5
6
7
class F:
 """An abstract class"""
  def __init__(self):
    self.list_of_secrets = []

  def getSecret(self):
    return self.list_of_secrets