Em Python, é possível acessar a classe que contém um método, dado apenas um objeto método?
Pergunta
Eu sou muito novo para Python, e não ter sido capaz de encontrar uma resposta para esta pergunta de pesquisa on-line.
Aqui está um exemplo decorador que não faz nada (ainda)
def my_decorator(text):
def wrap(f):
# grab magic f.parent_class_object.my_var and append text
def wrap_f(*args, **kwargs):
f(*args, **kwargs)
return wrap_f
return wrap
Aqui está um exemplo de classe
class MyClass:
my_var = []
@my_decorator('sometext')
def my_func()
# do some super cool thing
Na minha decorador eu gostaria de acessar o objeto de classe para MyClass
e adicionar em 'sometext' à lista MyClass.my_var
. Meu objetivo é my_var populate com os valores decorados em carga módulo tempo, não o tempo chamada de função.
Existe uma maneira que eu possa navegar de f
para MyClass
, a fim de fazer isso? Eu sei que args * [0] é a instância de MyClass, mas que só está disponível quando a função é chamada.
Solução
Não é possível lê-lo a partir de uma função dentro de um decorador de classe, uma vez que os "métodos" são ainda função normal enquanto a classe está sendo compilado. Além disso, o nome da classe não foi definido enquanto ele está sendo compilado.
O que você poderia fazer é fornecer a lista my_var
para o decorador.
class MyClass:
my_var = []
@my_decorator(my_var, 'sometext')
def my_func()
# do some super cool thing
my_var
ainda é uma variável normal até então.