在python中是否可以使用模式匹配来匹配函数?就像一个可以响应多个调用的函数。

2024-10-01 15:37:33 发布

您现在位置:Python中文网/ 问答频道 /正文

我想做一个像列表一样的类。但是,我希望能够使用所有内置的listrepr()函数,有什么方法可以这样做:

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中为这样的东西设置一个catch all case,来捕获__repr__, __str__, __iter__之类的东西

谢谢


Tags: self列表indexdefcustomargsfunctionall
1条回答
网友
1楼 · 发布于 2024-10-01 15:37:33

至少在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))

相关问题 更多 >

    热门问题