2013-02-25 88 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