我试图让一个属性打印它在python中的owner类中分配给它的名称,并且我已经找到了一个方法,当且仅当属性被直接赋值时,它才有效。如果属性是继承的,则不起作用,如下所示。当您调用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
可以使用类的
__mro__
属性遍历基类,在每个类__dict__
中查找属性:“mro”代表方法解析顺序,是一个基类列表,按照python查找方法和其他类定义属性的顺序排列。扫描这个列表意味着您将按照Python使用的相同顺序在基类中查找属性。在
您的示例代码可以正确使用上述代码:
^{pr2}$相关问题 更多 >
编程相关推荐