gpt4 book ai didi

python - 如何在类中移动此方法装饰器模式?

转载 作者:太空宇宙 更新时间:2023-11-04 05:53:26 25 4
gpt4 key购买 nike

目前,我正在使用装饰器将类中的方法动态添加到列表中;这样我就可以在需要的时候同时遍历所有这些,而且我不需要一次手动添加它们中的每一个:

predicates_list = []
def predicate(func):
predicates_list.append(func)
return func

class Person(object):
@predicate
def name_is_bill(self, name):
return True if name == 'bill' else False

def test_everything(self, tester):
if any(predicate(name) for predicate in predicates_list:
return True
else:
return False

但是,在 Person 类的范围之外使用装饰函数和列表是没有意义的——只有 Person 类或其子类会使用它。我没有运气尝试使装饰器函数成为类方法或静态方法。

作为类方法,我得到关于需要两个参数的错误。 (这个错误是有道理的,但我是否需要将 clsself 作为装饰器中的第一个参数传递?如果需要,如何传递?)

作为静态方法,我无权访问类的属性。我可以在装饰器函数中指定类的名称,但如果我需要子类化 Person,我就会遇到问题。

必须有一种优雅的方式来做到这一点,但我没有想法。

最佳答案

您使用的模式看起来是正确的。官方的大部分例子Python Decorator Library使用您采用的相同模式 - 类外的装饰器定义。参见,例如,Property Definition示例。

关于python - 如何在类中移动此方法装饰器模式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29000341/

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