2013-02-25 84 views
1

我不知道如果这个代码的输出是正确的还是错误:这是Python继承中的错误吗?

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

有什么想法?

+0

我不确定它是否相同,因为没有涉及继承。 – user1234299 2013-02-25 12:51:55

+2

这是一样的。它仍然是一个类属性,而不是实例属性。在这种情况下是父类,但仍然是完全相同的情况。 – 2013-02-25 12:52:22

+0

要回答这个问题:No. – Junuxx 2013-02-25 12:53:27

回答

2

list_of_secrets的范围是这里的课程。你想,而不是将其连接到self__init__

def __init__(self): 
     self.list_of_secrets = [] 
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