2010-07-23 34 views
19

È possibile ottenere il nome di una sottoclasse? Per esempio:Ottieni il nome della sottoclasse?

class Foo: 
    def bar(self): 
     print type(self) 

class SubFoo(Foo): 
    pass 

SubFoo().bar() 

stamperà: < type 'instance' >

Sto cercando un modo per ottenere "SubFoo".

So che puoi fare isinstance, ma non conosco il nome della classe a priori, quindi non funziona per me.

+0

.. almeno, si può usare 'issubclass (SubFoo, Foo)' – mykhal

risposta

8
#!/usr/bin/python 
class Foo(object): 
    def bar(self): 
    print type(self) 

class SubFoo(Foo): 
    pass 

SubFoo().bar() 

Subclassing da object ti dà classi di nuovo stile (che non sono più così nuovi - python 2.2!) Ogni volta che vuoi lavorare molto con l'attributo self otterrai molto di più per il tuo buck se sottoclassi dall'oggetto. Documenti di Python ... new style classes. Storicamente Python ha lasciato il vecchio stile Foo() per compatibilità con le versioni precedenti. Ma questo è stato tanto tempo fa. Non c'è più molta ragione per non sottoclasse dall'oggetto.

+0

E 'Foo()' non funzionerà neanche su versioni abbastanza vecchie di Python. –

3

Funziona molto meglio quando si utilizzano classi di nuovo stile.

class Foo(object): 
    .... 
13

è possibile utilizzare

SubFoo().__class__.__name__ 

che potrebbe essere off-topic, dal momento che ti dà un nome di classe :)

+0

@ars non esattamente – mykhal

+0

Ops, scusate. Hai ragione, mio ​​male. – ars

1

SubFoo.__name__

E i genitori: [cls.__name__ for cls in SubFoo.__bases__]

Problemi correlati