我正在尝试创建一个像列表一样的类。但是,我希望能够使用所有内置列表 repr() 函数等,有没有办法做这样的事情:
class myList:
...
def __getitem__(self, index):
#custom getitem function
def __setitem(self,index,value):
#custom setitem function
def toList(self):
#returns a list
#and a catch-all case:
def __*__(*args):
return self.toList().__*__(*args)
所以,我的问题是,是否有可能在Python中为类似的东西做一个包罗万象的情况,以捕获诸如__repr__,__str__,__iter__
等的东西
谢谢!
最佳答案
不可能用单个方法捕获此类调用,至少在 CPython 中是这样。虽然您可以定义像 __getattr__
这样的特殊方法,但即使在元类上定义低级 __getattribute__
也不起作用,因为解释器会扫描特殊方法名称以构建快速查找类型使用的排序表defined in C 。任何实际上不拥有此类单独方法的东西都不会响应解释器的内部调用(例如,来自 repr
)。
你能做的是dynamically generate (或增强,如下)一个具有您想要的任何特殊方法的类。结果的可读性可能会受到太大影响,因此这种方法不值得:
def mkfwd(n):
def fwd(self,*a): return getattr(self.toList(),n)(*a)
return fwd
for m in "repr","str":
m="__%s__"%m
setattr(myList,m,mkfwd(m))
关于python - 是否可以在 python 中的函数上使用模式匹配?就像一个可以响应多个调用的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56300707/