[PYTHON] À propos du polymorphisme pour l'élimination des nids

Réflexions sur le polymorphisme

Le polymorphisme sans eval peut simplifier la description des branches, mais il ne peut pas l'éliminer. Vous pouvez utiliser eval pour éliminer l'imbrication des branches, mais c'est effrayant → Oh, je ne peux pas l'instancier avec eval of python (je vais le vérifier bientôt)

Commentaire

Le polymorphisme pour éliminer la ramification générale semble provoquer une ramification au moment de la création de l'objet. L'application du polymorphisme rend la description des branches plus légère, il est donc possible de soutenir que l'objectif initial d'améliorer la maintenabilité a été atteint, mais l'effet ne peut pas être ressenti. Il y a une idée de faire quelque chose comme eval au moment de la création de l'objet afin de casser complètement la branche, mais je suis vaguement inquiet pour eval. J'aimerais connaître votre opinion sur ce domaine. Ce qui suit est le polymorphisme ou le typage du canard, mais la même chose est vraie.

Avant le polymorphisme

switch.py


#Il y a une succursale en premier lieu
request = param #param contient les paramètres de la requête et les supposés Dog et Cat
if request == "Dog":
  print "wan"
elif request == "Cat":
  print "nya-"

Après le polymorphisme

polymorphism.py


#Il y a une branche au moment de la création de l'objet
class Dog:
  def foo(self):
    print "wan"
class Cat:
  def foo(self):
    print "nya-"

def make(animal):
  if animal == "Dog":
    return Dog()
  elif animal == "Cat":
    return Cat()

request = param #param contient les paramètres de la requête et le chien et le chat supposés
animal = make(request)
animal.foo()

Eval élimine l'imbrication des polymorphes

polymorphism_eval.py


#Pas de succursale
class Dog:
  def foo(self):
    print "wan"
class Cat:
  def foo(self):
    print "nya-"

request = param #param contient les paramètres de la requête et le chien et le chat supposés
animal = eval(request+"()")
animal.foo()

Recommended Posts

À propos du polymorphisme pour l'élimination des nids
À propos de Python for loop
À propos de Python, pour ~ (plage)
À propos de pgbench pour MySQL
Prise en charge de Fabric pour Python 3
À propos de "for _ in range ():" de python
À propos des polices japonaises de matplotlib (pour Mac)
À propos du traitement d'expansion des données pour l'apprentissage en profondeur