2017-10-17 1 views
1

Angenommen, eine KlasseWie kann der Quellcode eines Objekts abgerufen werden?

class Book(object): 
    def __init__(self, title, author): 
     self.title = title 
     self.author = author 
    def get_entry(self): 
     return self.__dict__ 

eine Instanz erstellen:

>>> book = Book('Think Python', 'Allen') 
>>> vars(book) 
{'title': 'Think Python', 'author': 'Allen'} 

ich einen weiteren Schritt gehen, um die Anweisung von Objektbuch abzurufen. Der Ausgang I Absicht ist {'title': 'Think Python', 'author': 'Allen','get_entry':statements}

So importieren ich inspect Informationen des lebenden Objekt berichten

>>> import inspect 
>>> inspect.getsource(book) 

Fehler

TypeError: <__main__.Book object at 0x10f3a0908> is not a module, class, method, function, traceback, frame, or code object 

jedoch zu bekommen, Python Dokumente angeben ‚Bringen Sie den Text der Quelle Code für ein Objekt. Das Argument kann ein Modul, eine Klasse, eine Methode, eine Funktion, ein Traceback, ein Rahmen oder ein Codeobjekt sein. Der Quellcode wird als einzelne Zeichenfolge zurückgegeben. Ein OSError wird ausgelöst, wenn der Quellcode nicht abgerufen werden kann. ' 29.12. inspect — Inspect live objects — Python 3.6.3 documentation Was ist hier falsch?

+1

Sie müssen 'getsource' die Klasse selbst übergeben und keine Instanz. 'inspect.getsource (Book)' würde funktionieren. – nutmeg64

Antwort

1

Die Funktion getsource funktioniert mit Klassen, nicht Instanzen der Klasse. Also, würden Sie sie passieren müssen, wie folgt:

inspect.getsource(Book) # Book is the class, defined by 'class Book:' 

statt:

inspect.getsource(book) # where book is an Instance of the Book class. 

Die Klasse speichert den Code Plan, ist die Instanz nur eine Version dieses Plans mit eigenen Werten. Daher müssen Sie die Klasse bestehen.

Verwandte Themen