gpt4 book ai didi

python - 在类方法和子类方法上使用 python 装饰器

转载 作者:行者123 更新时间:2023-11-28 22:07:02 28 4
gpt4 key购买 nike

目标:使修饰类方法成为可能。当一个类方法被装饰时,它被存储在一个字典中,以便其他类方法可以通过字符串名称引用它。

动机:我想实现与 ASP.Net 的 WebMethods 等效的功能。我在谷歌应用引擎之上构建它,但这并不影响我遇到的困难点。

如果它有效,它会是什么样子:

class UsefulClass(WebmethodBaseClass):
def someMethod(self, blah):
print(blah)

@webmethod
def webby(self, blah):
print(blah)

# the implementation of this class could be completely different, it does not matter
# the only important thing is having access to the web methods defined in sub classes
class WebmethodBaseClass():
def post(self, methodName):
webmethods[methodName]("kapow")

...

a = UsefulClass()
a.post("someMethod") # should error
a.post("webby") # prints "kapow"

可能还有其他方法可以解决这个问题。我很乐意接受建议

最佳答案

这是不必要的。只需使用 getattr:

class WebmethodBaseClass():
def post(self, methodName):
getattr(self, methodName)("kapow")

唯一需要注意的是,您必须确保只能使用旨在用作 web 方法的方法。 IMO 最简单的解决方案是采用非 Web 方法以下划线开头的约定,并让 post 方法拒绝为此类名称提供服务。

如果你真的想使用装饰器,试试这个:

def webmethod(f):
f.is_webmethod = True
return f

并获取 post 以在调用方法之前检查 is_webmethod 属性是否存在。

关于python - 在类方法和子类方法上使用 python 装饰器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2711101/

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