Я пытаюсь получить свойство, чтобы напечатать имя, которому он назначен в классе владельца в python, и я разработал метод, который, кажется, работает тогда и только тогда, когда свойство напрямую назначено. Это не работает, если свойство наследуется, как показано ниже. Что хорошего, так что при вызове Handler.CLIENT_ID
или SubHandler.CLIENT_ID
имя переменной CLIENT_ID
всегда печатается?Как найти имя свойства из класса Python
class Auto(object):
def __get__(self, instance, owner):
attr_name = (k for (k, v) in owner.__dict__.iteritems() if v == self).next()
return attr_name
class Handler(object):
name = 'account'
CLIENT_ID = Auto()
class SubHandler(Handler):
pass
h = Handler()
print h.CLIENT_ID
# prints CLIENT_ID
s = SubHandler()
print s.CLIENT_ID
# Traceback (most recent call last):
# attr_name = (k for (k, v) in owner.__dict__.iteritems() if v == self).next()
# StopIteration