为了账号安全,请及时绑定邮箱和手机立即绑定

为什么 hasattr 返回错误的结果?

为什么 hasattr 返回错误的结果?

红糖糍粑 2021-06-08 08:12:46
下面是我的测试代码:import functoolsclass LazyLoader(object):    def __init__(self, klass, *args, **kwargs):        self.klass = klass        self.args = args        self.kwargs = kwargs        self.instance = None    def __getattr__(self, name):        return functools.partial(self.__run_method, name)    def __run_method(self, __name, *args, **kwargs):        if self.instance is None:            self.instance = self.klass(*self.args, **self.kwargs)        return getattr(self.instance, __name)(*args, **kwargs)class SchedulerReportClient(object):    def method(self):        print 'method called'    def __getattr__(self, name):        print '__getattr__ called'        return functools.partial(self.__run_method, name)    def __run_method(self, __name, *args, **kwargs):        print '__run_method called'        return getattr(self, __name)(*args, **kwargs)if __name__ == "__main__":    a = SchedulerReportClient()    entity = LazyLoader(a)    print hasattr(entity, 'obj_to_primitive')    print(callable(entity.obj_to_primitive))    print entity.__class__.__name__    if hasattr(entity, 'obj_to_primitive') and callable(entity.obj_to_primitive):        entity.obj_to_primitive()出局是:TrueTrueTraceback (most recent call last):LazyLoader  File "C:/Users/chen/PycharmProjects/pytest/main", line 42, in <module>    entity.obj_to_primitive()  File "C:/Users/chen/PycharmProjects/pytest/main", line 17, in __run_method    self.instance = self.klass(*self.args, **self.kwargs)TypeError: 'SchedulerReportClient' object is not callable代码大部分在openstack nova中,我复制了一些。obj_to_primitiveclass 中没有方法SchedulerReportClient,为什么 hasattr 和 callable 函数返回 true?CentOS7.4 与 Python2.7。
查看完整描述

1 回答

  • 1 回答
  • 0 关注
  • 110 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号