[PYTHON] Über Polymorphismus zur Nestbeseitigung

Gedanken zum Polymorphismus

Polymorphismus ohne Bewertung kann die Beschreibung von Zweigen vereinfachen, aber nicht beseitigen. Sie können eval verwenden, um das Verschachteln von Zweigen zu eliminieren, aber es ist beängstigend → Oh, ich kann es nicht mit einer Bewertung von Python instanziieren (ich werde es bald überprüfen)

Kommentar

Polymorphismus zur Beseitigung der allgemeinen Verzweigung scheint zum Zeitpunkt der Objekterstellung eine Verzweigung zu verursachen. Durch die Anwendung von Polymorphismus wird die Beschreibung von Zweigen leichter, sodass argumentiert werden kann, dass der ursprüngliche Zweck der Verbesserung der Wartbarkeit erreicht wurde, der Effekt jedoch nicht spürbar ist. Es gibt eine Idee, zum Zeitpunkt der Objekterstellung so etwas wie eine Auswertung durchzuführen, um den Zweig vollständig zu durchbrechen, aber ich mache mir vage Sorgen um die Auswertung. Ich würde gerne Ihre Meinung zu diesem Bereich hören. Das Folgende ist Polymorphismus oder Ententypisierung, aber das gleiche gilt.

Vor dem Polymorphismus

switch.py


#Es gibt überhaupt eine Niederlassung
request = param #param enthält die Parameter in der Anfrage und den angenommenen Hund und die Katze
if request == "Dog":
  print "wan"
elif request == "Cat":
  print "nya-"

Nach dem Polymorphismus

polymorphism.py


#Zum Zeitpunkt der Objekterstellung gibt es einen Zweig
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 enthält die Parameter in der Anfrage und den angenommenen Hund und die Katze
animal = make(request)
animal.foo()

Eval eliminiert das Verschachteln von polymorphisierten

polymorphism_eval.py


#Kein Zweig
class Dog:
  def foo(self):
    print "wan"
class Cat:
  def foo(self):
    print "nya-"

request = param #param enthält die Parameter in der Anfrage und den angenommenen Hund und die Katze
animal = eval(request+"()")
animal.foo()

Recommended Posts

Über Polymorphismus zur Nestbeseitigung
Über Python für Schleife
Über Python für ~ (Bereich)
Über pgbench für MySQL
Fabric unterstützt Python 3
Über "für _ in range ():" von Python
Über japanische Schriften von matplotlib (für Mac)
Informationen zur Datenerweiterungsverarbeitung für tiefes Lernen