我正在寻找一个关于如何存储在对象内部的对象上调用的方法的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,而不实现所有重载,以及其他情况.正如您所看到的,我还想存储值(可能在列表中,如果有多个值?),这些是方法的属性.
提前致谢!
在这个例子中,我试图分配新的__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__在对象本身中进行定义,但是这个问题专门针对在创建实例后分配它。