【发布时间】:2022-01-18 05:03:41
【问题描述】:
class Foo():
help_message = ""
def Help_Decorator(func):
def wrapper(data, context, caller):
try:
if data[0] == "help":
return(help_message) #<--- cannot access this locally
else:
return func(data,context,caller)
except:
return func(data,context,caller)
return wrapper
class Bar(Foo):
help_message = "A real help message!"
@foo.Help_Decorator
def Run(data,context,caller):
pass
如何在我的 Help_Decorator 中访问 Bar 的 help_message 而不将其作为参数传递给 Run?
【问题讨论】:
-
你不能。
foo.Help_Decorator仅获取一个函数作为其参数,并且该函数没有任何对Bar的引用,您可以使用它来访问Bar.help_message。 -
为什么
Rundata的第一个参数?应该是self。无论如何,现在该实例将被传递给 第一个参数,所以data.help_message应该可以工作,但您似乎根本不了解类定义 -
这样永远行不通。尝试在
class Foo中执行def foo(self): print(help_message)。 -
根据您的描述,听起来您只需要模块中的常规功能。这里的课似乎没有用
标签: python python-decorators python-class