引用类方法的父



我不久前发布了此信息。我一直在取得一些进步,这似乎比我想象的要棘手。Python:获取可呼叫函数参数的名称

我已经取得了@wraps的进步,现在我可以进一步进一步。这是一个值得自己线程的单独问题。

不久,我如何访问类实例,函数调用是谁的成员?这是一个完整的工作代码段,说明了该问题(仅Python 3(。

如果有人在乎,我需要在其他帖子中解释了我需要这样做的原因。当我调用b.set_something()时,参数是a的方法调用。但是,由于A中没有方法" set_something_else",但它被__getattr__() hack抓住了,我正在努力识别我正在使用的工作,因为我需要在远程服务器上"解释"远程服务器,类实例执行了哪些功能,并具有可能可呼叫的参数到其他类。

因此,我想在每个类实例中添加ID并将其用作参考。当我的b对象以a.get_something_else作为参数接收到b.get_something()的呼叫时,我现在可以是因为@wraps在我的B中检测到

  1. 该功能是A类
  2. 功能名称为" get_something_else"

现在,唯一缺少的链接是从A的实例中获取" ID",其成员get_something_else恰好是。这将使我能够将所有内容链接在一起。但是如何从B中引用它?我唯一的信息是可呼叫参数a.get_something_else。我能够自由修改foo和bar,但不能自由修改变量A和B的最后一部分。

from functools import wraps
import uuid
class Bar:
    def __init__(self):
        self.id = str(uuid.uuid4())
    def __getattr__(self, name):
        @wraps(name)
        def foo(*args, **kwargs):
            _kwa = {}
            for k, v in kwargs.items():
                if callable(v):
                    cn = "{}.{}".format(v.__qualname__.split(".")[0], v.__wrapped__)
                    # How to get "id" from the object whose member v is??
                    _kwa[k] = cn
                    continue
                else:
                    _kwa[k] = v
            x = {"args": args, "kwargs": _kwa}
            print(x)
        return foo
class Foo:
    def __init__(self):
        self.id = str(uuid.uuid4())
    def __getattr__(self, name):
        @wraps(name)
        def foo(*args, **kwargs):
            _kwa = {}
            for k, v in kwargs.items():
                if callable(v):
                    cn = "{}.{}".format(v.__qualname__.split(".")[0], v.__wrapped__)
                    _kwa[k] = cn
                    continue
                else:
                    _kwa[k] = v
            x = {"args": args, "kwargs": _kwa}
            print(x)
        return foo
a = Foo()
b = Bar()
b.set_something(command=a.set_something_else)

不确定这是否正是您想要的,但是您是否检查了超级功能?class parent((: def init (self(: super(parent,self(。 init ((

最新更新