2017-01-04 4 views
0

Ich möchte in der Lage sein, eine Klassenreferenz von einem dynamisch angegebenen Modul dynamisch anzugeben und diese Klassenreferenz an eine Drittanbieterbibliothek zu übergeben, die sie dann verwendet. Aber ich möchte nicht die Klasse selbst (und damit die __init__ Methode in der Klasse) aufrufen, wenn ich das tue, das ist für die Bibliothek zu tun.So erhalten Sie eine Klassenreferenz in Python ohne Aufruf von __init__

Im Moment habe ich dies:

import importlib 
import thirdpartylib 

# Load the module 
the_module = importlib.import_module('my_module') 

# Now the class 
the_class = getattr(the_module, 'MyClass')() 

thirdpartylib.process(the_class) 

Aber natürlich getattr() läuft die __init__ Methode, die ich nicht will.

Wie übergebe ich einen Verweis auf eine Klasse, ohne eine Instanz zu erstellen und __init__ auszulösen?

+6

Instanz wird wegen '()', nicht 'getattr' zurückgegeben. –

+0

@AshwiniChaudhary - Danke; das ist es; ein Versehen meinerseits; Ich habe diese vermisst. Sende es als Antwort, wenn du willst und ich akzeptiere es. –

Antwort

2
the_class = getattr(the_module, 'MyClass') 

Dies wäre die Klasse.

the_class = getattr(the_module, 'MyClass')() 

Dies ist eine Instanz der Klasse. Sie müssen die nachfolgende () entfernen.

Verwandte Themen