我目前正在寻找一种在python对象上创建“视图”的可维护且易于使用的方法。具体来说,我有很多类,它们共享几种常见的方法,并且我想包装这些类的实例,以修改这些方法的行为。
当然,我可以按照包装模式为每个类创建一个新类,重新定义完整的接口并将每个方法重定向到原始对象,但我希望覆盖的对象除外。这是不切实际的,因为所需的代码量很大,并且在更改任何类时都需要维护。
一些实验表明,我可以大量使用元类和自省功能来生成包装器,以“重新创建”包装器对象中的接口,但是事实证明,使用和调试它非常可怕,特别是如果A具有属性(不包括代码)
第二次尝试表明,通过共享__dict__属性和覆盖,可以用相当少的代码来完成__class__。这将导致以下代码(https://repl.it/repls/InfantileAshamedProjector):
##############################
# Existing code
##############################
class A1:
def __init__(self, eggs):
self.eggs = eggs
# Lots of complicated functions and members
def hello(self):
print ("hello, you have %d eggs" % self.eggs)
def meeting(self):
self.hello()
print ("goodbye")
# Lots of complicated functions calling hello.
# Lots of A2, A3, A4 with the same pattern
##############################
# "Magic" code for view generation
##############################
class FutureView:
pass
def create_view(obj, name):
class View(obj.__class__):
def hello(self): …Run Code Online (Sandbox Code Playgroud)