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)
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.
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-"
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()
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