Вот код, который меня смущает.
#python3 code
class SuperClass():
def __init__(self,a):
self.a = a
class SubClass(SuperClass):
def __init__(self,a):
self.a = a
super(SubClass,self).__init__(a+1)
if __name__ == '__main__':
sub = SubClass(1)
print(sub.a) # result is 2
# print(super(SubClass,sub).a) # AttributeError: 'super' object has no attribute 'a'
Я предполагаю, что при вызове super(SubClass,self).__init__(a+1)
объект sub
передается в self
в суперклассе, не является родительским объектом sub .
У меня есть 2 вопроса:
- Правильно ли мое предположение? Если правильно, почему дизайн такой? Если нет, то каков правильный механизм?
- как я могу передать значение a + 1 в SuperClass.a ,, другими словами, получается
super(SubClass,sub).a=2
Спасибо
Редактировать 1
Извините за код. Я потерял две строки self.a=a
и super(SubClass,self).__init__(a+1)
. Я исправил код выше ,, и он все еще поддерживает мое предположение.
Редактировать 2
#Let me explain my doubt in detail
#Generally We have a class Clazz
class Clazz():
def f(self,a):
pass
# and it's instance c
c = Clazz();
# when invoke method f of instance c, instance should be implicit pass to the method as first parameter.
c.f(1) # formally equivalent to c.f(c,1)
#then back to my case
#In my logic
# super(SubClass,self) is a instance of class super ,when it invokes method __init__
# Similarly super(SubClass,self).__init__(a+1) should be equivalent to super(SubClass,self).__init__(super(SubClass,self),a+1)
class SuperClass():
def __init__(self,a): # self=super(SubClass,sub)
self.a = a # formally equivalent to super(SubClass,sub).a = a
# however it's not like as i thought
# super(SubClass,self).__init__(a+1) formally equivalent to super(SubClass,self).__init__(sub,a+1)
class SuperClass():
def __init__(self,a): # self=sub
self.a = a # formally sub.a = a
# it's contradictory