Вы можете создать метод внутри вашего класса, который проверяет все переменные в текущем фрейме и использует hash()
для поиска переменной self
.
Предлагаемое здесь решение вернет все переменные, указывающие к объекту экземпляра.
В приведенном ниже классе isinstance()
используется, чтобы избежать проблем при применении hash()
, так как некоторые объекты, такие как numpy.array
или list
, например, не сбрасываются .
import inspect
class A(object):
def get_my_name(self):
ans = []
frame = inspect.currentframe().f_back
tmp = dict(frame.f_globals.items() + frame.f_locals.items())
for k, var in tmp.items():
if isinstance(var, self.__class__):
if hash(self) == hash(var):
ans.append(k)
return ans
Выполнен следующий тест:
def test():
a = A()
b = a
c = b
print c.get_my_name()
Результат:
test()
#['a', 'c', 'b']