2013-02-25 8 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() 

Выход с помощью питона 2.7.3:

x: ['secret value!']

y: ['secret value!']

Я думаю, он должен выдавать:

x: ['secret value!']

y: []

Любые мысли?

+0

Я не уверен, что это то же самое, так как нет наследования. – user1234299

+2

То же самое. Он по-прежнему является атрибутом класса, а не атрибутом экземпляра. Родительский класс в этом случае, но все же такая же ситуация. –

+0

Чтобы ответить на вопрос: № – Junuxx

ответ

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 

 Смежные вопросы

  • Нет связанных вопросов^_^