2015-02-25 1 views
1

У меня есть иерархия классов, которые наследуют друг от друга, что выглядеть примерно так:Как использовать полученный переменный класс в методе BaseClass

class BaseClass(object): 
    def __init__(self): 
     self.localLog = logging.getLogger(testName) 
     self.var1 = 'a' 

    def printVar(self): 
     print self.var1 

class SubClass1(BaseClass): 
    def __init__(self): 
     self.var1 = 'b' 
     super(SubClass1, self).__init__() 

class SubClass2(SubClass1): 
    def __init__(self): 
     self.var1 = 'c' 
     super(SubClass2, self).__init__() 

Теперь я хочу, чтобы создать экземпляр SubClass2 и вызвать BaseClassprintVar метод с SubClass2 местным var1 переменная:

obj = SubClass2() 
obj.printVar() 

То, что я хочу, чтобы это произошло для переменной c подняться вплоть до BaseClass и быть передан методу printVar. Однако я получаю вместо этого переменную a.

Я понимаю, что я получу желаемый результат, удалив строки super, но я должен оставить их доступными к переменной self.localLog во всех классах наследования.

Есть ли способ достичь того, что я хочу, или я должен просто поддерживать локальный метод printVar для каждого класса?

+2

Почему вы устанавливаете 'self.var1' ** перед ** вы называете' super() '? Выполнение означает, что определение суперкласса может переопределить его. –

+0

@CharlesDuffy Вы абсолютно правы! Моя мисс. Благодаря! –

ответ

3

Похоже, вы можете легко решить эту проблему, просто вызвав super(...).__init__()перед тем установки var1 в своих подклассов.