假设你有class Foo
4 个方法和class FooDecorator
. 从这 4 种方法中,FooDecorator
只需要装饰一种方法。
从 pythonic/OO 设计的角度来看,__getattr__
用于将请求转发到装饰实例是否可以?这基本上会删除 deocrator 类中的大量样板代码。
例子:
class Foo(object):
def method_1(self):
return some, stuff
def method_2(self):
return some, stuff
def method_3(self):
return some, stuff
def method_4(self):
return some, stuff
class FooClassicDecorator(object):
def __init__(self, foo_instance):
self._foo_instance = foo_instance
def method_1(self):
returned = self._foo_instance.method_1()
return decorate_result(returned)
def method_2(self):
return self._foo_instance.method_2()
def method_3(self):
return self._foo_instance.method_3()
def method_4(self):
return self._foo_instance.method_4()
class FooGetattrDecorator(ojbect):
def __init__(self, foo_instance):
self._foo_instance = foo_instance
def __getattr__(self, attr_name):
return getattr(self._foo_instance, attr_name)
def method_1(self):
returned = self._foo_instance.method_1()
return decorate_result(returned)
你觉得哪个更优雅?FooClassicDecorator
还是FooGetattrDecorator
?