您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

在hasattr()上没有eval的Python延迟属性

5b51 2022/1/14 8:21:26 python 字数 2160 阅读 503 来源 www.jb51.cc/python

当你尝试使用hasattr()访问它时,是否有可能使一个装饰器使属性变得懒惰而不是eval?我弄清楚如何让它变得懒惰,但是hasattr()会让它过早地进行评估.例如.,class lazyattribute: # Magic. class A: @lazyattribute def bar(self): print('

概述

当你尝试使用hasattr()访问它时,是否有可能使一个装饰器使属性变得懒惰而不是eval?我弄清楚如何让它变得懒惰,但是hasattr()会让它过早地进行评估.例如.,

class lazyattribute:
    # Magic.

class A:
    @lazyattribute
    def bar(self):
      print("Computing")
      return 5

>>> a = A()
>>> print(a.bar)
'Computing'
5
>>> print(a.bar)
5
>>> b = A()
>>> hasattr(b,'bar') 
'Computing'
5
# Wanted output: 5

hasattr(对象,名称)

参数是一个对象和一个字符串.如果字符串是对象属性之一的名称,则结果为True,否则返回False. (这是通过调用getattr(object,name)并查看它是否引发异常来实现的.)

由于属性可以通过__getattr__方法动态生成,因此没有其他方法可靠地检查它们的存在.对于您的特殊情况,也许明确地测试字典就足够了:

any('bar' in d for d in (b.__dict__,b.__class__.__dict__))

总结

以上是编程之家为你收集整理的在hasattr()上没有eval的Python延迟属性全部内容,希望文章能够帮你解决在hasattr()上没有eval的Python延迟属性所遇到的程序开发问题。


如果您也喜欢它,动动您的小指点个赞吧

除非注明,文章均由 laddyq.com 整理发布,欢迎转载。

转载请注明:
链接:http://laddyq.com
来源:laddyq.com
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。


联系我
置顶