Pythonの所有者クラスで割り当てられている名前を出力するプロパティを取得しようとしています。プロパティが直接割り当てられている場合にのみ機能するように見えるメソッドを作成しました。以下に示すように、プロパティが継承されている場合は機能しません。Handler.CLIENT_ID
どちらかを呼び出すかSubHandler.CLIENT_ID
、変数名CLIENT_ID
が常に出力されるようにするための良い方法は何ですか?
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