Как мне написать класс, который позволяет анализировать экземпляры с __name__? - PullRequest
0 голосов
/ 31 марта 2011

Написание класса Foo, который позволяет его экземплярам возвращать имена, с которыми они были созданы с использованием __name__,

A = Foo(args)

str(A.__name__) 

, должен возвращать 'A'

1 Ответ

6 голосов
/ 31 марта 2011

Это невозможно (по крайней мере, не во всех случаях и не без грязных трюков). В вашем примере A является ссылкой на объект типа Foo. Объект не знает, как хранятся ссылки на него. Если вы напишите:

A = Foo(args)
B = A

затем A и B оба ссылаются на один и тот же объект и абсолютно неразличимы, поэтому вы не можете найти, какой из них использовался для хранения первой ссылки на объект. Конечно, вы можете отсканировать globals() для ссылок на объект, и затем вы найдете A и B. Однако, если вы del A, все следы A исчезнут.

Что вы пытаетесь сделать? Если вы объяснили вариант использования, возможно, мы могли бы предложить альтернативное решение, а не то, что вы просили.

...