Задать вопрос

Как получить имя экземпляра класса, если оно не используется как его атрибут?

Всем добрый!
есть у меня класс:
class Lamp:
    def __init__(self, floor=0, color='yellow', power=60):
        self.floor = floor
        self.color = color
        self.status = False
        self.power = power

    def gather_attrs(self):
        """Собирает атрибуты экземпляра"""
        attrs = []
        for key in sorted(self.__dict__):
            attrs.append(f"{key}={getattr(self, key)}")
        return attrs

    def __repr__(self):
        indent = '=' * 15
        return f"{indent}\nЛампа: {КАК СЮДА ВСТАВИТЬ ИМЯ ЭКЗЕМПЛЯРА?}\n" \
            f"{self.gather_attrs()}\n{indent}"

я создаю экземпляр: lamp1 = Lamp(1, 'white', 100 )
Можно ли получить имя ('lamp1') созданного экземпляра, если оно не используется как его атрибут?
Или все же только через инициализацию?

  • Вопрос задан
  • 3090 просмотров
Подписаться 1 Простой Комментировать
Решения вопроса 1
sergey-gornostaev
@sergey-gornostaev Куратор тега Python
Седой и строгий
Это имя не экземпляра, а переменной. Нет, его нельзя получить в методе.
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
@bbkmzzzz
Можно, но зачем?
import inspect

class Foo:
    def getVarName(self):
        for i in inspect.currentframe().f_back.f_locals.items():
            if id(self) == id(i[1]):
                return i[0]


if __name__ == '__main__':
    x = Foo()
    x1 = Foo()
    x2 = Foo()

    print(x.getVarName())
    print(x1.getVarName())
    print(x2.getVarName())
Ответ написан
@BogdanVR666
а если без модулей, то мне удалось через globals().items():
class Test:
	def GetName(self):
		for i, j in globals().items():
			if j is self:
				return i
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы