加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

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.

更新:
这里有一些代码可以更好地理解我的意思.
下面的类用于显示基于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的一部分是“明确比隐含更好”,而自我的使用就是一个例子.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读