是否可以通过这种方式在不引用 self
的情况下定义函数?
def myfunc(var_a,var_b)
但这样它也可以获得发件人数据,就像我这样定义它一样:
def myfunc(self, var_a,var_b)
那个 self
总是一样的,所以总是以这种方式运行一个函数在这里看起来有点多余:myfunc(self,'data_a','data_b')
.然后我想在这样的函数中获取它的数据 sender.fields
。
更新: 这里有一些代码可以更好地理解我的意思。 下面的类用于显示一个基于 Jinja2 模板引擎的页面,供用户注册。
class SignupHandler(webapp.RequestHandler):
def get(self, *args, **kwargs):
utils.render_template(self, 'signup.html')
下面的代码是一个 render_template
,我创建它作为 Jinja2 函数的包装器,以便在我的项目中更方便地使用它:
def render_template(response, template_name, vars=dict(), is_string=False):
template_dirs = [os.path.join(root(), 'templates')]
logging.info(template_dirs[0])
env = Environment(loader=FileSystemLoader(template_dirs))
try:
template = env.get_template(template_name)
except TemplateNotFound:
raise TemplateNotFound(template_name)
content = template.render(vars)
if is_string:
return content
else:
response.response.out.write(content)
因为我在我的项目中经常使用这个函数 render_template
并且通常使用相同的方式,只是使用不同的模板文件,所以我想知道是否有一种方法可以摆脱像我这样调用它的麻烦现在就做,将 self 作为第一个参数,但仍然可以访问该对象。
最佳答案
如果您不需要 self,您可以使用staticmethod
装饰器创建一个不接收对象作为其第一个参数的方法:
class Foo(object):
@staticmethod
def foo(bar, baz, qux):
pass
相比之下,如果您正在编写仅处理类全局数据的代码,则可以使用类方法:
class Foo(object):
global_cache={}
@classmethod
def set(cls, key, value):
cls.global_cache[key] = value
相比之下,如果您正在编写确实需要引用对象实例的代码——self
是语言的一部分。 Python 禅宗的一部分是“显式优于隐式”,self
的使用就是一个例子。
关于python - 执行函数而不向其发送 'self',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5313364/