Estou com problemas para resolver um problema de recursão. Como posso criar uma classe que se comporte assim:
- imprima os atributos solicitados:
o.foo.bar
imprimiria"o.foo.bar"
quando chamado. - a mesma coisa para uma função:
o.foo.bar(True)
->"o.foo.bar(True)"
. - esta chamada de atributo retornará um valor quando chamada, por exemplo "1".
O código ficaria assim:
>>> o = MyClass()
>>> result = o.foo.bar
"o.foo.bar"
>>> print(result)
1
Tentei algumas coisas, __getattr__
mas não consigo lidar com a recursão corretamente. Não consigo saber quando o fim da cadeia aninhada foi alcançado e então retornar o resultado com precisão.
Foi o mais perto que cheguei:
class MyClass:
def __init__(self):
self.a = []
def __getattr__(self, name):
self.a.append(name)
print(self.a)
return self
o = MyClass()
result = o.foo.bar
PROPÓSITO
Este é um código simplificado para eliminar a complexidade do contexto. Atualmente, estou tentando encapsular a API JS do Photoshop, e isso poderia ajudar a chamar as funções do software escrevendo as mesmas funções da API em Python. O print
seria substituído por uma chamada ao Servidor PS e o result
pelo resultado real da chamada.