Python – 多重继承()

class Root:
    def ping(self):
        print(f'{self},ping() in Root')

    def pong(self):
        print(f'{self}.pong in Root')

    def __repr__(self):
        cls_name = type(self).__class__
        return f'<instance of {cls_name}>'


class A(Root):
    def ping(self):
        print(f'{self},ping() in A')
        super().ping()

    def pong(self):
        print(f'{self}.pong in A')
        super().pong()

class B(Root):
    def ping(self):
        print(f'{self},ping() in B')
        super().ping()

    def pong(self):
        print(f'{self}.pong in B')



class Left(A,B):
    def ping(self):
        print(f'{self},ping() in Left')
        super().ping()

if __name__ == '__main__':
    left1 = Left()
    left1.ping()

'''
<instance of Left>.ping() in Left
<instance of Left>.ping() in A
<instance of Left>.ping() in B
<instance of Left>.ping() in Root
'''
if __name__ == '__main__':
    left1 = Left()
    left1.pong()
'''
<instance of Left>.pong in A
<instance of Left>.pong in B
'''
class Left(B,A):
    def ping(self):
        print(f'{self}.ping() in Left')
        super().ping()

if __name__ == '__main__':
    left1 = Left()
    left1.pong()

'''
<instance of Left>.pong in B
'''
class LeftUA(U,A):
    def ping(self):
        print(f'{self}.ping() in LeftUA')
        super().ping()

if __name__ == '__main__':
    left3 = LeftUA()
    left3.ping()

'''
<instance of LeftUA>.ping() in LeftUA
<instance of LeftUA>.ping() in U
<instance of LeftUA>.ping() in A
<instance of LeftUA>.ping() in Root
'''
class U():
    def ping(self):
        print(f'{self}.ping() in U')
        super().ping()

class LeftAU(A,U):
    def ping(self):
        print(f'{self}.ping() in LeftAU')
        super().ping()

if __name__ == '__main__':
    left2 = LeftAU()
    left2.ping()

'''
<instance of LeftAU>.ping() in LeftAU
<instance of LeftAU>.ping() in A
<instance of LeftAU>.ping() in Root
'''
————————
class Root:
    def ping(self):
        print(f'{self},ping() in Root')

    def pong(self):
        print(f'{self}.pong in Root')

    def __repr__(self):
        cls_name = type(self).__class__
        return f'<instance of {cls_name}>'


class A(Root):
    def ping(self):
        print(f'{self},ping() in A')
        super().ping()

    def pong(self):
        print(f'{self}.pong in A')
        super().pong()

class B(Root):
    def ping(self):
        print(f'{self},ping() in B')
        super().ping()

    def pong(self):
        print(f'{self}.pong in B')



class Left(A,B):
    def ping(self):
        print(f'{self},ping() in Left')
        super().ping()

if __name__ == '__main__':
    left1 = Left()
    left1.ping()

'''
<instance of Left>.ping() in Left
<instance of Left>.ping() in A
<instance of Left>.ping() in B
<instance of Left>.ping() in Root
'''
if __name__ == '__main__':
    left1 = Left()
    left1.pong()
'''
<instance of Left>.pong in A
<instance of Left>.pong in B
'''
class Left(B,A):
    def ping(self):
        print(f'{self}.ping() in Left')
        super().ping()

if __name__ == '__main__':
    left1 = Left()
    left1.pong()

'''
<instance of Left>.pong in B
'''
class LeftUA(U,A):
    def ping(self):
        print(f'{self}.ping() in LeftUA')
        super().ping()

if __name__ == '__main__':
    left3 = LeftUA()
    left3.ping()

'''
<instance of LeftUA>.ping() in LeftUA
<instance of LeftUA>.ping() in U
<instance of LeftUA>.ping() in A
<instance of LeftUA>.ping() in Root
'''
class U():
    def ping(self):
        print(f'{self}.ping() in U')
        super().ping()

class LeftAU(A,U):
    def ping(self):
        print(f'{self}.ping() in LeftAU')
        super().ping()

if __name__ == '__main__':
    left2 = LeftAU()
    left2.ping()

'''
<instance of LeftAU>.ping() in LeftAU
<instance of LeftAU>.ping() in A
<instance of LeftAU>.ping() in Root
'''