下面是我的测试代码: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。
添加回答
举报
0/150
提交
取消