objet python encapsulation orienté, héritage, polymorphisme

paquet

Peut-être simplement compris comme caché tous les détails de mise en œuvre cachée peut, ne fournit une interface de programmation simple au monde extérieur. Nous en fait, la méthode des données opérationnelles et les données encapsulées dans la méthode définie dans la classe jusqu'à, après que nous créons un objet, juste pour donner un objet envoie un message (appeler une méthode) du code peut être exécuté, qui signifie que nous ne vous devez connaître le nom de la méthode et les paramètres entrants (méthode vue extérieure), sans avoir besoin de connaître les détails de mise en œuvre interne de la méthode (vue interne de la méthode).

Exercice: Définir une classe implémente un certain nombre de plusieurs

import time


class Clock:

    def __init__(self):
        # 获取当前系统时间
        t = time.localtime()
        self._hour = t.tm_hour
        self._minute = t.tm_min
        self._second = t.tm_sec

    def run(self):
        self._second += 1
        if self._second == 60:
            self._second = 0
            self._minute += 1
            if self._minute == 60:
                self._minute = 0
                self._hour += 1
                if self._hour == 24:
                    self._hour = 0

    def show(self):
        return "%02d:%02d:%02d" % (self._hour, self._minute, self._second)


def main():
    clock = Clock()
    while True:
        # 将光标退到当前行首
        print("\r%s" % clock.show(), end="")
        time.sleep(1)
        clock.run()


if __name__ == '__main__':
    main()

Hériter

Dans la vraie vie, l' héritage se réfère généralement aux parents des enfants de propriété Hériter, comme indiqué ci - dessous
Insérer ici l'image Description
pourrait, les résultats suivants ...
Insérer ici l'image Description
le programme est décrit successivement appartient aux relations entre les choses, comme les chats et les chiens appartiennent à l'animal, le programme sera en mesure de hérité des animaux décrits comme les chats et les chiens, même, Bali et le chat persan hérité de chats, et le Shar Pei sont hérités des chiens dalmates, comme indiqué ci - dessous: les
Insérer ici l'image Description
sous - classes héritent des propriétés communes de la classe mère et la commune méthode, la classe parente des propriétés privées et les méthodes ne peut être héritée.

héritage unique

Hériter général une seule classe parente est appelée seul héritage, ne peut hériter d'une classe parent en Java et d' autres langage statique, il n'existe pas un héritage unique et multiple.
Exemple de code:

# 定义一个父类,如下:
class Cat(object):

    def __init__(self, name, color="白色"):
        self.name = name
        self.color = color

    def run(self):
        print("%s--在跑"%self.name)


# 定义一个子类,继承Cat类如下:
class Bosi(Cat):
	# 子类没有实现__init__方法,则自动调用父类的__init__方法

    def setNewName(self, newName):
        self.name = newName

    def eat(self):
        print("%s--在吃"%self.name)


bs = Bosi("印度猫")
print('bs的名字为:%s'%bs.name)
print('bs的颜色为:%s'%bs.color)
bs.eat()
bs.setNewName('波斯')
bs.run()

"""
输出结果:
bs的名字为:印度猫
bs的颜色为:白色
印度猫--在吃
波斯--在跑
"""

L'héritage multiple

Insérer ici l'image Description
Comme on peut le voir d'après la figure, que l' on appelle l' héritage multiple, à savoir une pluralité de classe parent sous-classe, et celui - ci ayant des caractéristiques.
L' héritage multiple est formaté comme suit:

# 定义一个父类
class A:
    def printA(self):
        print('----A----')

# 定义一个父类
class B:
    def printB(self):
        print('----B----')

# 定义一个子类,继承自A、B
class C(A,B):
    def printC(self):
        print('----C----')

obj_C = C()
obj_C.printA()
obj_C.printB()

"""
输出结果:
----A----
----B----
"""

Si par exemple multiple héritage ci-dessus, si la classe parente A et parent de classe B, il existe une méthode du même nom, le temps de passer par l'appel de la sous-classe, qui appelle?

class A:
    def print(self):
        print('----A----')


class B:
    def print(self):
        print('----B----')

# 定义一个子类,继承自A、B
class C(A,B):
    pass

obj_C = C()
obj_C.print()

"""
输出结果:
----A----
"""

En fait , l'ordre d'appel dépend de la classe C qui hérite de la première classe, première classe héritée sera d' abord appelé.
Voir aussi la séquence temporelle de la recherche de sujet pour la classe C par __mor__, le code ci - dessus

print(C.__mro__)
"""
输出结果:
(<class '__main__.C'>, <class '__main__.B'>, <class '__main__.A'>, <class 'object'>)
"""

Procédé remplacer la classe de parent

Le soi-disant réécrite, est une sous-classe du même nom et une méthode de la classe parent, une méthode dans une sous-classe va remplacer la méthode de la classe parent du même nom

class Cat:
    def sayHello(self):
        print("halou-----1")

class Bosi(Cat):

    def sayHello(self):
        print("halou-----2")
        
class Bali(Cat):

    def sayHello(self):
        print("halou-----3")

bosi = Bosi()
bali= Bali()
bosi.sayHello()
bali.sayHello()
"""
输出结果:
halou-----2
halou-----3
"""

Par la méthode de réécriture , nous pouvons faire le même comportement de la classe parente a une autre version dans une sous - classe pour atteindre, lorsque nous appelons cette sous - classe passes réécrite, différentes sous - classes d'objets présentent un comportement différent, c'est le polymorphisme (polymorphisme) .

Appelez la méthode de la classe parent

class Cat:
    def __init__(self,name):
        self.name = name
        

class Bosi(Cat):

    def __init__(self,name):
        # 调用父类的__init__方法1(python2)
        #Cat.__init__(self,name)
        # 调用父类的__init__方法2
        #super(Bosi,self).__init__(name)
        # 调用父类的__init__方法3
        super().__init__(name)
        self.color = 'yellow'

    def getName(self):
        return self.name

bosi = Bosi('xiaohua')

print(bosi.name)
print(bosi.color)
"""
输出结果:
xiaohua
yellow
"""

Résumé:

  • Si ce qui précède besoin d'appeler mentionné dans les sous-classes des besoins du constructeur de la classe parent pour construire explicitement la classe parente ou constructeur de la classe mère ne l'emporte pas, la sous-classe ne remplace pas la __init __, sous-classe instanciable , il appellera automatiquement la __init __ définition de la classe mère.
  • Si la sous - classe remplace la __init__, la sous - classe instanciable, il ne sera pas appeler la __init __ classe parente déjà définie.
  • Si la réécriture du __init __, configuré pour hériter de la classe parente, la méthode suivante peut être utilisée:
    • super (sous - classe, Self). init (paramètre 1, paramètre 2, ...)
    • Nom du parent. Le init (Auto, paramètre 1, paramètre 2, ...)

polymorphisme

Le concept de polymorphisme est utilisé en Java et C # ce type de langues fortement typé, tout en Python préconisant « frappe de canard. »

Publié 44 articles originaux · a gagné les éloges 8 · vues 2472

Je suppose que tu aimes

Origine blog.csdn.net/qq_39659278/article/details/99732182
conseillé
Classement