首页 > 解决方案 > 如何获取类中链接的方法的名称?

问题描述

考虑以下代码示例,该示例显示了一个简单的类,该类允许通过返回 self 来链接方法。

import inspect

class classname(object):
    def __init__(self):
        self.hold = None

    def funcname(self):
        self.hold = 'a'
        return self

    def method(self, c):
        self.hold = self.hold * c
        return self


c = classname().funcname().method(10)

我正在尝试做的是以c某种方式进行检查,以便我可以看到funcnamemethod在这堂课上被召唤。

标签: pythoninspect

解决方案


它可以完成,但不能通过inspect,因为实例本身不记得那个历史。您必须添加代码来手动维护调用。

class classname(object):
    def __init__(self):
        self.hold = None
        self.calls = []

    def funcname(self):
        self.hold = 'a'
        return self

    def method(self, c):
        self.hold = self.hold * c
        return self

    def __getattribute__(self, name):
        self_calls = object.__getattribute__(self, "__dict__")["calls"]
        self_calls.append(name)
        return object.__getattribute__(self, name)


c = classname().funcname().method(10)
print(c.calls)

推荐阅读