python – 执行函数而不向其发送’self’
发布时间:2020-12-20 12:26:36 所属栏目:Python 来源:网络整理
导读:是否可以定义一个函数而不用这种方式引用自我? def myfunc(var_a,var_b) 但是它也可以获取发送者数据,就像我将其定义为: def myfunc(self,var_a,var_b) 那个自我总是一样的,所以看起来总是以这种方式运行一个函数:myfunc(self,’data_a’,’data_b’).然
是否可以定义一个函数而不用这种方式引用自我?
def myfunc(var_a,var_b) 但是它也可以获取发送者数据,就像我将其定义为: def myfunc(self,var_a,var_b) 那个自我总是一样的,所以看起来总是以这种方式运行一个函数:myfunc(self,’data_a’,’data_b’).然后我想在函数中获取它的数据,如sender.fields. 更新: 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的一部分是“明确比隐含更好”,而自我的使用就是一个例子. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |