2016-04-25 8 views
1

Was ist eine Möglichkeit, Argumente aus __init__ zu extrahieren, ohne neue Instanz zu erstellen. Das Codebeispiel:Introspecting Argumente von der Konstruktorfunktion __init__ in Python

class Super: 
    def __init__(self, name): 
     self.name = name 

Ich suche etwas wie Super.__dict__.keys() Typ-Lösung. Nur zum Abrufen von Namensargument-Informationen ohne Hinzufügen von Werten. Gibt es eine solche Möglichkeit, das zu tun?

+0

Die Frage ist nicht klar. Meinst du, du möchtest den Wert des Namens überprüfen und entscheiden, ob du eine neue Instanz erstellen willst oder nicht? – ronakg

+0

Ich möchte keine Instanz überhaupt erstellen. Ich möchte Objektargumente untersuchen. Es ist genau wie Frage "welche Argumente dieses Objekt haben". Es geht um allgemeine Selbstbeobachtung, nicht um Werte. Ich habe die Frage geändert, um es ein wenig verständlicher zu machen. –

+1

Instanz wird bereits zu dem Zeitpunkt erstellt, an dem '__init__' aufgerufen wird. Siehe diese Antwort http://stackoverflow.com/questions/674304/pythons-use-of-new-and-init – ronakg

Antwort

3

können Sie verwenden inspect

>>> import inspect 
>>> inspect.getargspec(Super.__init__) 
ArgSpec(args=['self', 'name'], varargs=None, keywords=None, defaults=None) 
>>> 

Edit: inspect.getargspec nicht wirklich eine Instanz von Super erstellen, siehe unten:

import inspect 

class Super: 
    def __init__(self, name): 
     print 'instantiated' 
     self.name = name 

print inspect.getargspec(Super.__init__) 

Diese Ausgänge:

### Run test.a ### 
ArgSpec(args=['self', 'name'], varargs=None, keywords=None, defaults=None) 
>>> 

Beachten Sie, dass instantiated wurde nie gedruckt.

+0

Es sieht so aus, dass es ist, was ich gesucht habe. Eine zusätzliche Frage: Gibt es eine Option, um dieses Ergebnis ohne "inspect" -Modul zu erhalten. Etwas wie Super .__ dict __. Schlüssel Lösung, wenn es nicht ist, bedeutet das, dass inspect.getargspec() wie Instanzsimulation ist, die hilft, Argumente zu erhalten? –

+1

Es gibt eine Reihe von Antworten zum Abrufen von Argumentnamen aus einer Funktion - http://StackOverflow.com/questions/582056/getting-list-of-Parameter-Names-inside-python-function und es sieht aus wie inspect ist die einziger Weg. Sogar die Verwendung von 'globals' kehrt in einem Funktionsaufruf zurück, was nicht das ist, was Sie wollen. Übrigens führt die Verwendung von 'inspect' nicht zu einem Funktionsaufruf, sondern bearbeitet meine Antwort für ein Beispiel ... – Bahrom

+0

@ Vy.Iv siehe aktualisierte Antwort. – Bahrom

Verwandte Themen