Maison  >  Article  >  développement back-end  >  Partagez des exemples de classes de canard et de polymorphisme en python

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

零下一度
零下一度original
2017-06-15 15:59:361376parcourir

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

f35d6e602fd7d0f0edfa6f7d103c1b57 2cc198a1d5eb0d3eb508d858c9f5cbdbPermet à différents objets de réagir de manière flexible au même message
5bdf4c78156c7953567bb5a0aef2fc53Traiter un objet utilisé de manière commune
23889872c2e8594e0f446a471a78ec4cLes 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....

3. Langage dynamique et typage canard

f35d6e602fd7d0f0edfa6f7d103c1b57 Le type de liaison de variable n'est pas défini


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


23889872c2e8594e0f446a471a78ec4cLe 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


43ad812d3a971134e40facaca816c822 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())

f35d6e602fd7d0f0edfa6f7d103c1b57 Permet l'expansion ouverte et la fermeture modifiée2cc198a1d5eb0d3eb508d858c9f5cbdb 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!

Déclaration:
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