在python中检查数据描述符属性
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了在python中检查数据描述符属性,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1597字,纯文字阅读大概需要3分钟。
内容图文
![在python中检查数据描述符属性](/upload/InfoBanner/zyjiaocheng/785/6ebf2d4f450c4120a0637b53b3ad4509.jpg)
我正在尝试使用数据描述符为类的属性提供一些自定义的get / set功能.我希望能够在运行时检查类并获取该类的数据描述符列表,甚至可以确定描述符的类型.
问题是,当我查看使用inspect.getmembers的成员时,我的数据描述符属性被解析(它们的__get__方法已被调用,结果被设置为对象的值).
我正在使用以下示例:http://docs.python.org/2/howto/descriptor.html
import inspect
class RevealAccess(object):
"""A data descriptor that sets and returns values
normally and prints a message logging their access.
"""
def __init__(self, initval=None, name='var'):
self.val = initval
self.name = name
def __get__(self, obj, objtype):
print 'Retrieving', self.name
return self.val
def __set__(self, obj, val):
print 'Updating', self.name
self.val = val
class MyClass(object):
x = RevealAccess(10, 'var "x"')
y = 5
if __name__ == '__main__':
for x in inspect.getmembers(MyClass, inspect.isdatadescriptor):
print x
当我运行这个时,我得到:
Retrieving var "x"
('__weakref__', <attribute '__weakref__' of 'MyClass' objects>)
我的期望更像是:
('x', <attribute 'x' of 'MyClass' objects>)
('__weakref__', <attribute '__weakref__' of 'MyClass' objects>)
我知道我错过了一些我不能把手指放在上面的东西.任何帮助赞赏.
解决方法:
要获取描述符本身,您可以查看类__dict__:
MyClass.__dict__['x']
但更好的方法是修改getter:
def __get__(self, obj, objtype):
print 'Retrieving', self.name
if obj is None: # accessed as class attribute
return self # return the descriptor itself
else: # accessed as instance attribute
return self.val # return a value
这使:
Retrieving var "x"
('__weakref__', <attribute '__weakref__' of 'MyClass' objects>)
('x', <__main__.RevealAccess object at 0x7f32ef989890>)
内容总结
以上是互联网集市为您收集整理的在python中检查数据描述符属性全部内容,希望文章能够帮你解决在python中检查数据描述符属性所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。