close
import os
import sys
import copy
from functools import reduce

'''
    淺談 Python - super() 
        
        super() 其實是用來調用父類的一個方法,
        也是用來解決多重繼承問題的方式,直接用類的名稱調用父類方法,在使用單繼承的時候沒有問題,
        但是如果用再多繼承,則會涉及到查找順序( MRO ),重複之類的問題。
        
        ※ 所謂的 MRO 就是 類的方法解析的順序表,其實就是既成父類方法時的順序表
        
        而以下是super()方法 : 
            super(type,[,object-or-type])
            
'''
class FooParent(object):
    def __init__(self):
        self.parent='I\'m the parent.'
        print('Parent')
    def bar(self,message):
        print("%s from parent "% message)

class FooChild(FooParent):
    def __init__(self):
        # #super (FooChild,self) 首先! 會先找到 FooChild parent ( 就是 FooParent )        #然後再把FooChildobject轉換為 FooParent object
        super(FooChild,self).__init__()
        print('Child')
    def bar(self,message):
        super(FooChild, self).bar(message)
        print('Child bar function')
        print(self.parent)




def main():
    fooChild = FooChild()
    fooChild.bar('Hello')   ## Hello from Parent

    '''
    Parent
    Child
    Hello from Parent
    Child bar fuction
    I'm the parent.
    '''


if (__name__=='__main__'):
    main()

 

 

 

 

 

import os
import sys
import copy
from functools import reduce

class A():
    def __init__(self):
        self.AMoney = 10000
    def get_info(self):
        print("A()")

class B(A):
    def __init__(self):
        self.BMonry = 8000
        super().__init__()
    def get_info2(self):
        print("B()")

class C(B):
    def __init__(self):
        self.CMonry = 3000
        super().__init__()
    def get_info(self):
        print("C()")

    def get_Money(self):
        print("A money : " , self.AMoney ,
              "B money : " , self.BMonry ,
              "C monry : " , self.CMonry )


def main():
    item = C()
    item.get_Money()


if (__name__=='__main__'):
    main()

 

 

 

 

 

 

arrow
arrow
    全站熱搜

    Eric 發表在 痞客邦 留言(0) 人氣()