Объектно-ориентированное (2) наследование классов Python

1. Одиночное наследование: подкласс наследует только один родительский класс.

#父类
class Animal(object):
    def eat(self):
        print('它喜欢吃东西')
    def sleep(self):
        print('它喜欢睡觉')

#子类
class Cat(Animal):
    pass

a=Cat()   #实例化对象
a.eat()
a.sleep()

2. Множественное наследование

#父类Master
class Master():
    def __init__(self):
        # 属性
        self.kongfu='古法煎饼果子配方'
    def make_cake(self):
        print('按照%s制作煎饼果子' %(self.kongfu))

#父类 School
class School():
    def __init__(self):
        self.kongfu='现代煎饼果子配方'
    def make_cake(self):
        print('按照%s只做煎饼果子' %(self.kongfu))

#子类Prentice继承父类Master和School
class Prentice(Master,School):
    #就近原则
    pass

#实例化对象
damao=Prentice()
damao.make_cake()

#查看调用顺序
print(Prentice.__mro__)
按照古法煎饼果子配方制作煎饼果子
(<class '__main__.Prentice'>, <class '__main__.Master'>, <class '__main__.School'>, <class 'object'>)

3. Подкласс переопределяет свойства и методы родительского класса с тем же именем

class Master():
    def __init__(self):
        # 属性
        self.kongfu='古法煎饼果子配方'
    def make_cake(self):
        print('按照%s制作煎饼果子' %(self.kongfu))
class School():
    def __init__(self):
        self.kongfu='现代煎饼果子配方'
    def make_cake(self):
        print('按照%s只做煎饼果子' %(self.kongfu))
class Prentice(Master,School):
    #子类重写父类的同名属性和方法
    def __init__(self):
        self.kongfu='猫氏煎饼果子配方'
    def make_cake(self):
        print('按照%s只做煎饼果子' %(self.kongfu))

damao=Prentice()
print(damao.kongfu)
damao.make_cake()
#查看调用顺序
print(Prentice.__mro__)
猫氏煎饼果子配方
按照猫氏煎饼果子配方只做煎饼果子
(<class '__main__.Prentice'>, <class '__main__.Master'>, <class '__main__.School'>, <class 'object'>)

4. Подкласс вызывает свойства и методы родительского класса с тем же именем

class Master():
    def __init__(self):
        # 属性
        self.kongfu='古法煎饼果子配方'
    def make_cake(self):
        print('按照%s制作煎饼果子' %(self.kongfu))
class School():
    def __init__(self):
        self.kongfu='现代煎饼果子配方'
    def make_cake(self):
        print('按照%s只做煎饼果子' %(self.kongfu))
class Prentice(Master,School):
    #子类重写父类的同名属性和方法
    def __init__(self):
        self.kongfu='猫氏煎饼果子配方'
    def make_cake(self):
        print('按照%s只做煎饼果子' %(self.kongfu))
    # 子类调用父类同名属性和方法
    def oldmake(self):
        # Master().make_cake()
        m=Master()
        m.make_cake()
    # 子类调用父类同名属性和方法
    def newmake(self):
        School.__init__(self)
        School.make_cake(self)
damao=Prentice()
print(damao.kongfu)
damao.make_cake()
damao.oldmake()
damao.newmake()
#查看调用顺序
print(Prentice.__mro__)
猫氏煎饼果子配方
按照猫氏煎饼果子配方只做煎饼果子
按照古法煎饼果子配方制作煎饼果子
按照现代煎饼果子配方只做煎饼果子
(<class '__main__.Prentice'>, <class '__main__.Master'>, <class '__main__.School'>, <class 'object'>)

5. Вызвать метод родительского класса super()

class Animal(object):
    def play(self):
        print('动物都有自己的玩法')
class Cat(Animal):
    def play(self):
        super().play()
        print('猫猫喜欢玩逗猫棒')
c=Cat()
c.play()
动物都有自己的玩法
猫猫喜欢玩逗猫棒

6. Классная работа

 

# 父类  股票类
class Stock():
    def holding(self):
        print('股票买入和卖出')
s=Stock()
s.holding()
print()
# 子类  公募机构
class Public(Stock):
    def operate(self):
        print('公募机构买入和卖出')
        # 子类调用父类 方法一
        super().holding()
    # 子类调用父类 方法二
    def method1(self):
        s=Stock()
        s.holding()
    # 子类调用父类 方法三
    def method2(self):
        Stock.__init__(self)
        Stock.holding(self)
p=Public()
p.operate()
p.method1()
p.method2()
print()
# 子类 私募机构
class Private(Stock):
    # 重写父类
    def holding(self):
        # 调用父类方法
        super().holding()
        print('股票和私募买入和卖出')

self=Private()
self.holding()

Guess you like

Origin blog.csdn.net/qq_44954371/article/details/126472418