Partagez des exemples de classes de canard et de polymorphisme en python

零下一度
Libérer: 2017-06-15 15:59:36
original
1379 Les gens l'ont consulté

L'éditeur suivant vous présentera une discussion banale sur les classes de canard et le polymorphisme en Python. L'éditeur le trouve plutôt bon, je vais donc le partager avec vous maintenant et le donner comme référence pour tout le monde. Suivons l'éditeur et jetons un coup d'œil

1. Qu'est-ce que le polymorphisme

<1> <2>Permet à différents objets de réagir de manière flexible au même message
<3>Traiter un objet utilisé de manière commune
<4>Les langages non dynamiques doivent passer Implémentation par héritage et interface

2. Polymorphisme en python

<1>通过继承实现多态(子类可以作为父类来使用)
<2>子类通过重载父类的方法实现多态

class Animal:
  def move(self):
    print(&#39;animal is moving....&#39;)
class Dog(Animal):
  pass
def move(obj):
  obj.move()

>>>move(Animal())
>>>animal is moving....
>>>move(Dog())
>>>animal is moving....

class Fish(Animal):
  def move(self):
    print(&#39;fish is moving....&#39;)
>>>move(Fish())
>>>fish is moving....
Copier après la connexion

3. Langage dynamique et typage canard

<1> Le type de liaison de variable n'est pas défini


<2> ;Ne vérifiez pas le type de paramètre fourni lors de l'appel de la méthode


<4>Le fait que l'appel réussisse ou non est déterminé par les méthodes et les attributs avec les paramètres, et l'appel échoue ensuite. une erreur est générée


<5> Pas besoin d'implémenter l'interface


4. Les avantages du polymorphisme
class P:
  def init(self, x, y):
    self.x = x
    self.y = y
  def add(self, oth):
    return P(self.x+oth.x, self.y+oth.y)
  def info(self):
    print(self.x, self.y)
class D(P):
  def init(self, x, y, z):
    super.init(x, y)
    self.z = z

  def add(self, oth):
    return D(self.x+oth.x, self.y+oth.y, self.z+oth.z)
  def info(self):
    print(self.x, self.y, self.z)

class F:
  def init(self, x, y, z):
    self.x = x
    self.y = y
    self.z = z

  def add(self, oth):
    return D(self.x+oth.x, self.y+oth.y, self.z+oth.z)
  
  def info(self):
    print(self.x, self.y, self.z)
  

def add(a, b):
  return a + b

if name == &#39;main&#39;:
  add(p(1, 2), p(3, 4).info())
  add(D(1, 2, 3), D(1, 2, 3).info())
  add(F(2, 3, 4), D(2, 3, 4).info())
Copier après la connexion

<1> Permet l'expansion ouverte et la fermeture modifiée<2> Rend les programmes Python plus flexibles

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal