我正在尝试制作一个类似于列表的类。但是,我希望能够使用所有内置列表 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__
之类的东西,等等。
谢谢!
答案 0 :(得分:0)
至少在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))