mixin et dérivation

Tout d'abord, mixin

La bonne façon d'ouvrir l'héritage multiple: le mécanisme des mixins

Le cœur du mécanisme des mixins: il s'agit d'améliorer autant que possible la lisibilité de l'héritage multiple dans le cadre de l'héritage multiple

ps: laissez l'héritage multiple satisfaire les habitudes de pensée des gens = "quoi" est "quoi"

class Vehicle:
    pass

class FlyableMixin:
    def fly(self):
        pass

class CivilAircraft(FlyableMixin,Vehicle):  # 民航飞机
    pass

class Helicopter(FlyableMixin,Vehicle):  # 直升飞机
    pass

class Car(Vehicle):  # 汽车并不会飞,但按照上述继承关系,汽车也能飞了
    pass

Soyez très prudent lorsque vous utilisez la classe Mixin pour implémenter l'héritage multiple

  • Tout d'abord, il doit représenter une certaine fonction, pas un élément. Python nomme généralement la classe mixin avec le suffixe Mixin, able, ible
  • Deuxièmement, elle doit avoir une seule responsabilité. S'il existe plusieurs fonctions, écrivez plusieurs classes Mixin. Une classe peut hériter de plusieurs Mixin. Afin de garantir le respect du principe d'héritage "is-a", un seul parent peut être hérité qui identifie la signification de son attribution. Classe
  • Ensuite, cela ne dépend pas de l'implémentation de la sous-classe
  • Enfin, même si la sous-classe n'hérite pas de la classe Mixin, elle fonctionne toujours, mais il lui manque une certaine fonction. (Par exemple, l'avion peut toujours transporter des passagers, mais il ne peut pas voler)

2. Dérivation

派生:子类中衍生出的新东西
    1、子类独有,父类没有
    2、子类有,父类也有,子类是完全覆盖父类的
    3、子类有,父类也有,子类是在父类的基础上进行拓展

Comment réutiliser les fonctions de la classe parent dans la nouvelle méthode dérivée de la classe enfant

Méthode 1: le nom de famille nommé appelle une fonction dans une certaine catégorie = "ne dépend pas de l'héritage

class OldboyPeople:
    def __init__(self,name,age,sex):
        self.name=name
        self.age=age
        self.sex=sex

    def f1(self):
        print('%s say hello' %self.name)


class Teacher(OldboyPeople):
    def __init__(self,name,age,sex,level,salary):
        OldboyPeople.__init__(self,name,age,sex)

        self.level = level
        self.salary=salary

tea_obj=Teacher('egon',18,'male',10,3000)
print(tea_obj.__dict__)
{'name': 'egon', 'age': 18, 'sex': 'male', 'level': 10, 'salary': 3000}

Méthode 2: super () appelle la méthode fournie par la classe parente à elle-même = "dépend strictement de la relation d'héritage

L'appel super () obtiendra un objet spécial, l'objet se référera au mro de la classe qui a lancé la recherche d'attribut, va à la classe parent de la classe courante

class OldboyPeople:
    def __init__(self,name,age,sex):
        self.name=name
        self.age=age
        self.sex=sex

    def f1(self):
        print('%s say hello' %self.name)


class Teacher(OldboyPeople):
    def __init__(self,name,age,sex,level,salary):
        # super(Teacher,self).__init__(name,age,sex)
        super().__init__(name,age,sex) # 调用的是方法,自动传入对象

        self.level = level
        self.salary=salary

# print(Teacher.mro())
tea_obj=Teacher('egon',18,'male',10,3000)
print(tea_obj.__dict__)
{'name': 'egon', 'age': 18, 'sex': 'male', 'level': 10, 'salary': 3000}
# super()案例
class A:
    def test(self):
        print('from A')
        super().test()

class B:
    def test(self):
        print('from B')

class C(A,B):
    pass


obj=C()
obj.test()
print(C.mro())

from A
from B
[<class '__main__.C'>, <class '__main__.A'>, <class '__main__.B'>, <class 'object'>]

Je suppose que tu aimes

Origine www.cnblogs.com/chenyoupan/p/12675974.html
conseillé
Classement