pythonマルチ継承super問題

17812 ワード

# coding=utf-8
# https://www.jianshu.com/p/3b7ebe0389e4
#        
class FatFather(object):
    def __init__(self, name, *args, **kwargs):
        print()
        print("===============      FatFather  ========================")
        print('FatFather init     ')
        self.name = name
        print('  FatFather  name %s' % self.name)
        print('FatFather init    ')
        print()
        print("===============      FatFather  ========================")


#          FatFather  
class FatBoss(FatFather):
    def __init__(self, name, hobby, *args, **kwargs):
        print()
        print("===============      FatBoss  ========================")
        print('          !')
        # super().__init__(name)
        ##              ,        
        super().__init__(name, *args, **kwargs)
        print("%s      %s" % (name, hobby))
        print()
        print("===============      FatBoss  ========================")


#             FatFather 
class FatBossWife(FatFather):
    def __init__(self, name, housework, *args, **kwargs):
        print()
        print("===============      FatBossWife  ========================")
        print('            !      ')
        # super().__init__(name)
        ##              ,        
        super().__init__(name, *args, **kwargs)
        print("%s         %s" % (name, housework))
        print()
        print("===============      FatBossWife  ========================")


#             FatBoss FatBossWife 
class FatBossGril(FatBoss, FatBossWife):
    def __init__(self, name, hobby, housework):
        print('            !      ,           ')
        super().__init__(name, hobby, housework)


def main():
    print("  FatBossGril  MRO")
    print(FatBossGril.__mro__) #         

    print()
    print("===========      MRO     super   =============")
    gril = FatBossGril("    ", "    ", "  ")


if __name__ == "__main__":
    main()


"""
  FatBossGril  MRO
(, , , , )

===========      MRO     super   =============
            !      ,           

===============      FatBoss  ========================
          !

===============      FatBossWife  ========================
            !      

===============      FatFather  ========================
FatFather init     
  FatFather  name     
FatFather init    

===============      FatFather  ========================
               

===============      FatBossWife  ========================
              

===============      FatBoss  ========================
"""
class Car:
    def __init__(self,name,age,**kwargs):
        self.name = name
        self.age = age
        print(self.name,self.age,"car")
    def say(self):
        print("hello car")

class Truck:
    def __init__(self,name,color,*args,**kwargs):
        self.name = name
        self.age = color
        print(self.name,self.age,"truck")
    def say(self):
        print("hello truck")

class DF(Truck,Car):
    def __init__(self,name,color,age,*args,**kwargs):
        self.name = name
        self.age = color
        self.name = age
        super().__init__(name,color,age)
        print(DF.__mro__)

if __name__ == '__main__':
    DF("dongfeng","red",7).say()

"""
dongfeng red truck
(, , , )
hello truck
"""

    @property 、
__getattr__ __getattribute__ 、 
__new__   __init__、
     	
https://blog.csdn.net/sunt2018/article/details/88696305

   、    、   、    、    。
https://blog.csdn.net/sunt2018/article/details/86571961

         
https://blog.csdn.net/sunt2018/article/details/86570014