小编jun*_*ang的帖子

Python 3 通过 __getattr__ 提示动态属性

为了包装模块的所有函数调用并通过包装器类的__getattr__方法访问它,我尝试使用typing库,但我无法弄清楚如何正确执行此操作。

import interface

"""
>>> print(interface.__all__)
['execute_foo_operation', ...]
"""

class InterfaceWrapper(object):
    def __init__(self, job_queue):
        self.job_queue = job_queue
        self.callbacks = []

    def __getattr__(self, name):
        func = getattr(interface, name)
        return functools.partial(self._wrapper, func)

    def _wrapper(self, func, *args, **kwargs):
        job = func(*args, **kwargs)
        self.job_queue.push(job)
        for callback in self.callbacks:
            callback(job)
        return job

    def register_callback(self, callback):
        self.callbacks.append(callback)


class Operator(object):
    def __init__(self, job_queue):
        self.interface = InterfaceWrapper(job_queue)

    def after_queuing(self):
        # do something

    def execute_foo_operation(self):
        self.interface.register_callback(self.after_queuing)
        self.interface.execute_foo_operation()  # unresolved attribute

Run Code Online (Sandbox Code Playgroud)

任何人都可以指导我的代码正常工作吗?

python type-hinting python-3.x python-decorators

8
推荐指数
1
解决办法
824
查看次数