2016-07-29 14 views
2

ein Objekt es ist leicht Angesichts den Objekttyp in Python zu erhalten:Wie kann ich den Typ einer Klasse erhalten, ohne sie in Python zu instanziieren?

obj = SomeClass() 
t = type(obj) 

Wie kann ich dies tun, ohne zuerst eine Instanz der Klasse zu erstellen?

Hintergrund: Sobald Sie den Typ haben, können Sie leicht Instanzen dieses Typs erstellen. Mit diesem Mechanismus möchte ich einen Typ an ein Objekt übergeben, das später Instanzen dieses Typs erzeugt. Es wäre sehr vernünftig, nicht zuerst ein Objekt erstellen zu müssen, das sofort wieder weggeworfen wird.

+7

't = SomeClass' – vaultah

+0

Der Typ eines Objekts entspricht der Klasse, mit der es erstellt wurde. Daher ist der Typ eines "SomeClass" -Objekts "SomeClass". In Python 2 haben Objekte aus alten Stilklassen den Typ 'instance', aber das ist in Python 3 nicht richtig. – zondo

Antwort

2

Sehen Sie dieses Beispiel-Code:

class MyClass(object): 
    pass 

if __name__ == '__main__': 
    o1 = MyClass() 
    c = MyClass 
    o2 = c() 

    print(type(o1), type(o2), MyClass) 

eine Klasse definieren, um seinen Namen bindet es (hier: MyClass), die nichts anderes als eine Bezugnahme auf diese Definition. In diesem Beispiel spiegelt die Ausgabe von c = MyClass die Klassenreferenz nur auf eine andere Variable, die Inhalte der Variablen c und MyClass sind jetzt genau gleich. Somit können Sie Objekte dieser Klasse instanziieren, indem Sie einen von ihnen aufrufen (d. H. MyClass() oder c()), was zu demselben Effekt führt.

Darüber hinaus führt das Testen auf den Typ eines instanziierten Objekts zu genau derselben Klassenreferenz. Sie können sogar noch einen Schritt weiter gehen und zu tun:

o3 = type(o1)() 

, die eine neue Instanz der Klasse erstellt, von denen o1 ist.

+0

Danke, dass du das genauer erklärt hast! –