2012-12-30 11 views
6

ho il seguente codice:Python - come posso ottenere il nome di classe all'interno di un metodo di classe - utilizzando @classmethod

class ObjectOne(object): 
    @classmethod 
    def print_class_name(cls): 
     print cls.__class__.__name__ 

    def print_class_name_again(self): 
     print self.__class__.__name__ 

if __name__ == '__main__': 
    obj_one = ObjectOne() 
    obj_one.print_class_name() 
    obj_one.print_class_name_again() 

L'output è:

type 
ObjectOne 

Vorrei l'uscita di essere:

ObjectOne 
ObjectOne 

Ma vorrei mantenere test_cls come metodo di classe attraverso la @classmethod decorat o.

Come posso realizzare questo?

risposta

5

E 'cls.__name__. cls punti già alla classe, e ora che stai ricevendo il nome della sua classe (che è sempre type).

+4

's/always/solito /'. Metaclasses rock. – delnan

23

A classmethod riceve la classe come argomento. Ecco perché lo chiami cls. Basta fare cls.__name__.

Problemi correlati