相关疑难解决方法(0)

如何捕获python中对象调用的任何方法?

我正在寻找一个关于如何存储在对象内部的对象上调用的方法的pythonic解决方案.

因为在python中,如果我想捕获例如abs()方法,我将重载此运算符,如:

Catcher(object):
    def __abs__(self):
        self.function = abs

c = Catcher()
abs(c)  # Now c.function stores 'abs' as it was called on c
Run Code Online (Sandbox Code Playgroud)

例如,如果我想要捕获一个具有其他属性的函数,pow()我将使用它:

Catcher(object):
    def __pow__(self, value):
        self.function = pow
        self.value = value

c = Catcher()
c ** 2  # Now c.function stores 'pow', and c.value stores '2'
Run Code Online (Sandbox Code Playgroud)

现在,我正在寻找的是一个通用的解决方案,捕获和存储任何类型的函数Catcher,而不实现所有重载,以及其他情况.正如您所看到的,我还想存储值(可能在列表中,如果有多个值?),这些是方法的属性.

提前致谢!

python oop methods object call

18
推荐指数
1
解决办法
4285
查看次数

分配给双下划线方法(__eq__、__lt__、__gt__)

在这个例子中,我试图分配新的__eq____lt__并且__gt__由对象比较字面的方法和调用它们3。为什么bar(...)从不调用?

class Foo:
    def __init__(self):
        self.__eq__ = self.bar
        self.__lt__ = self.bar
        self.__gt__ = self.bar

    def bar(self, other):
        print("bar called.")

a = Foo()
a == 3
a < 3
a > 3
Run Code Online (Sandbox Code Playgroud)

这个答案中,我找到了提示you can't assign new __eq__ to the object。不过,我找不到此声明的任何官方来源。

任何提示和帮助表示赞赏!

编辑:我知道可以选择__eq__在对象本身中进行定义,但是这个问题专门针对在创建实例后分配它。

python python-3.x

-1
推荐指数
1
解决办法
153
查看次数

标签 统计

python ×2

call ×1

methods ×1

object ×1

oop ×1

python-3.x ×1