gpt4 book ai didi

python - 使用 __getattr__ 实现装饰器设计模式

转载 作者:太空宇宙 更新时间:2023-11-03 18:55:49 26 4
gpt4 key购买 nike

假设你有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)

你觉得哪个更优雅? FooClassicDecoratorFooGetattrDecorator

最佳答案

我发现另一个问题非常相似。投票最高和接受的答案似乎与我的 FooGetattrDecorator 非常相似

Implementing the decorator pattern in Python

关闭它并标记为重复。

关于python - 使用 __getattr__ 实现装饰器设计模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17292972/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com