我有一个Python类Foo
和一个更注重内存的版本LightFoo
。它们的属性中包含的信息最终是相同的,但编码方式不同
少数Foo
的方法将完全为LightFoo
重新编写,但对于大多数方法来说,将LightFoo
实例转换为Foo
并调用相应的Foo
方法是很好的。例如,LightFoo
可能包括:
def total(self):
self.fooize().total()
但是,如果Foo
有100个方法,这就变得非常乏味了。真正方便的方法是将LightFoo
设置为从Foo
继承,并在默认情况下为LightFoo
中找不到的所有方法插入强制转换步骤。我很确定这是不可能的,但是似乎有一种更好的方法比为Foo
的每个方法编写一个像上面那样的块更好
如果fooize()正在执行一些自定义处理来将对象转换为Foo,那么您可以通过定义
__getattr__
来实现这一点,当您访问找不到的属性时,会调用__getattr__
。你可以在那里打电话给fooize()
否则,您可以直接从Foo继承,让不存在的方法返回到超类
相关问题 更多 >
编程相关推荐