Angenommen, ich habe eine Klasse mit einem Konstruktor definiert.Python - Konstruktor Argumente Argumente ohne Instanziierung
class Person:
def __init__(self, name="", age=0):
self.__name = name
self.__age = age
Nun würde Ich mag eine Instanz von Person
machen, aber nehme an, dass ich vergessen, was ich an den Konstruktor übergeben sollte. Da ich Standardargumente definiert habe, kann ich
dummy_person = Person()
print dummy_person.__init__.__code__.co_varnames
Was ich sehen lassen, was die Argumente sind, so dass ich ein neues Person
machen kann, dieses Mal den entsprechenden Namen und das Alter übergeben.
Die Frage ist: Wie kann ich ein ähnliches Ergebnis erreichen, ohne zuerst eine dummy_person
instanziieren zu müssen? Mit anderen Worten: Kann ich auf die Argumentliste des Konstruktors zugreifen, indem ich nur den Klassennamen kenne?
Bearbeiten: Hier ist, wie ich diese Funktion verwenden möchte.
args_names = CircleTrajectory.__init__.__code__.co_varnames[1:]
args = {}
for arg_name in args_names:
args.append(float(input("Insert " + arg_name + ": ")))
my_circle = CircleTrajectory(*args)
Damit dies funktioniert, müssen wir eine CircleTrajectory
Klasse definiert haben, und wir müssen davon ausgehen, dass alle Parameter ihres Baumeisters Schwimmer sind. Die letzte Annahme gefällt mir nicht besonders, aber ich denke, es ist sicher, da alle diese Objekte vom Endbenutzer erstellt werden müssen, indem die Werte in einer GUI eingegeben werden.
whle können Sie das tun, es scheint, wie Sie hier eine falsche Frage stellen, da dies scheint eine vermasselte Lösung zu sein. Könnten Sie den gesamten Anwendungsfall, der davon betroffen ist, teilen? –
Wenn Sie eine Instanz aus Benutzereingaben erstellen möchten, sollte diese Logik nicht Teil der Klasse selbst sein (das ist rhetorische Frage; die Antwort ist ja)? Ziehen Sie es in Erwägung, es zu einer Klassenmethode zu machen, statt mit Introspektion herumzulaufen ('my_circle = CircleTrajectory.from_input()'), vor allem da Sie nicht erkennen können, welche Art von Eingabe von außen benötigt wird. – jonrsharpe
Nun, jetzt, wo Sie es erwähnen, sicher! Das eröffnet hier eine ganz neue Welt der Möglichkeiten. Ich habe noch einen kleinen Zweifel: Ist die 'from_input' Methode eine' @ classmethod', und ruft sie darin einen Konstruktor auf? – Antonio