1. 程式人生 > 其它 >python super()函式

python super()函式

1:super(本身類名,self).方法名(引數)這樣就可以呼叫父類的方法和引數了,super()內也可不加引數
2:規律是super是按呼叫的次序執行,super後面的語句是逆向執行的。
有2段示例程式碼,不同的在於value有沒有用self.value表示。用self.value表示傳入的引數,會產生類似遞迴的效果進來的One,Two,返回是Two,One
用value表示則是按照順序傳遞的。

class Base:
    def __init__(self, value):
        self.value = value
"""
程式1:
foo = Ways(5)
先呼叫super(Ways, self).__init__(value)
再呼叫super(One, self).__init__(value)和super(Two, self).__init__(value)
再呼叫self.value = value,此時self.value為5
其後類似遞迴的逐漸返回
呼叫self.value += 3, self.value為8
呼叫self.value *= 2,self.value為16,注意進來的One,Two,返回是Two,One


"""
 
class One(Base):
    def __init__(self, value):
        super(One,self).__init__(value)# super(本身類名,self).方法名(引數)這樣就可以呼叫父類的方法和引數了
        self.value *= 2
 
 
class Two(Base):
    def __init__(self, value):
        super(Two,self).__init__(value)
        self.value += 3
 
 
class Ways(One, Two):
    # super是繼承父代
    def __init__(self, value):
        super(Ways,self).__init__(value)
 
foo = Ways(5)
print(foo.value) # 菱形繼承問題

class Base:
    def __init__(self, value):
        self.value = value
 
 
class One(Base):
    def __init__(self, value):
        super(One, self).__init__(value * 2)
"""

程式2:
foo = Ways(5)
先呼叫super(Ways, self).__init__(value)
再呼叫super(One, self).__init__(value * 2)和super(Two, self).__init__(value + 3),然後呼叫self.value = value----One呼叫Base,使self.value為5,執行One,self.value為10,注意Two不再呼叫Base使self.value再為5,
直接加3,變成13

規律是super是按呼叫的次序執行,super後面的語句是逆向執行的。
"""
 
class Two(Base):
    def __init__(self, value):
        super(Two, self).__init__(value + 3)
 
 
class Ways(One, Two):
    def __init__(self, value):
        super(Ways, self).__init__(value)
 
foo = Ways(5)
print(foo.value) # 13
努力拼搏吧,不要害怕,不要去規劃,不要迷茫。但你一定要在路上一直的走下去,儘管可能停滯不前,但也要走。