Улучшение реализации трэпа

Вы можете создать метод внутри вашего класса, который проверяет все переменные в текущем фрейме и использует 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']
17
задан Don Stewart 17 April 2011 в 02:39
поделиться