Como faço para obter o nome da classe em que estou atualmente?
Exemplo:
def get_input(class_name):
[do things]
return class_name_result
class foo():
input = get_input([class name goes here])
Devido à natureza do programa com o qual estou interagindo (vistrails), não posso usar __init__()
para inicializar input
.
getName
de uma classe filha, o nome da classe filha é gerado. Então fica complicado se você realmente quer a classe com a qual está trabalhando.getName
partir de uma classe pai, ele produzirá o nome da classe filha? Ok ty por apontar isso.getName()
método for definido em uma superclasse) está correta.Dentro do corpo de uma classe, o nome da classe ainda não foi definido, portanto, não está disponível. Você não pode simplesmente digitar o nome da classe? Talvez você precise falar mais sobre o problema para que possamos encontrar uma solução para você.
Eu criaria uma metaclasse para fazer esse trabalho para você. É invocado no momento da criação da classe (conceitualmente no final da classe: bloco) e pode manipular a classe que está sendo criada. Eu não testei isso:
fonte
MyType
asuper
linha emInputAssigningMetaclass
?Você pode acessá-lo pelos atributos privados da classe:
EDITAR:
Como disse
Ned Batcheler
, isso não funcionaria no corpo da classe, mas funcionaria em um método.fonte
PEP 3155 introduzido
__qualname__
, que foi implementado em Python 3.3.É acessível a partir da própria definição de uma classe ou função, por exemplo:
irá imprimir efetivamente
Foo
. Você obterá o nome totalmente qualificado (excluindo o nome do módulo), então você pode querer dividi-lo no.
caractere.No entanto, não há como obter um controle real da classe que está sendo definida.
fonte
EDIT: Sim, você pode; mas você tem que trapacear: o nome da classe em execução no momento está presente na pilha de chamadas e o
traceback
módulo permite que você acesse a pilha.No entanto, eu não faria isso; Minha resposta original ainda é minha preferência como solução. Resposta original:
provavelmente a solução mais simples é usar um decorador, que é semelhante à resposta de Ned envolvendo metaclasses, mas menos poderoso (decoradores são capazes de magia negra, mas metaclasses são capazes de magia negra oculta antiga )
fonte
fonte
Eu acho que deveria ser assim:
fonte