通过casting批量实现Python方法

2024-10-03 09:16:48 发布

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

我有一个Python类Foo和一个更注重内存的版本LightFoo。它们的属性中包含的信息最终是相同的,但编码方式不同

少数Foo的方法将完全为LightFoo重新编写,但对于大多数方法来说,将LightFoo实例转换为Foo并调用相应的Foo方法是很好的。例如,LightFoo可能包括:

def total(self):
    self.fooize().total()

但是,如果Foo有100个方法,这就变得非常乏味了。真正方便的方法是将LightFoo设置为从Foo继承,并在默认情况下为LightFoo中找不到的所有方法插入强制转换步骤。我很确定这是不可能的,但是似乎有一种更好的方法比为Foo的每个方法编写一个像上面那样的块更好


Tags: 实例方法内存self版本信息属性foo
1条回答
网友
1楼 · 发布于 2024-10-03 09:16:48

如果fooize()正在执行一些自定义处理来将对象转换为Foo,那么您可以通过定义__getattr__来实现这一点,当您访问找不到的属性时,会调用__getattr__。你可以在那里打电话给fooize()

def __getattr__(self, name):
    return getattr(self.fooize(), name)

否则,您可以直接从Foo继承,让不存在的方法返回到超类

相关问题 更多 >