python 函数_python函数如何访问自己的属性?

使其中一个函数的默认参数是对函数本身的引用。

def f(self):

return self.x

f.func_defaults = (f,)

用法示例:

>>> f.x = 17

>>> b = f

>>> del f

>>> b()

17

说明

原始海报想要一个不需要全局名称查找的解决方案。简单的解决方案

def f():

return f.x

在每个调用上执行全局变量f的查找,其不满足要求。如果f被删除,则函数失败。更复杂的检查建议以同样的方式失败。

我们想要的是在对象本身内执行早期绑定和存储绑定引用。以下是概念上我们正在做的:

def f(self=f):

return self.x

在上面的例子中,self是一个局部变量,因此不执行全局查找。但是,我们不能按原样编写代码,因为当我们尝试将self的默认值绑定到f时,f尚未定义。相反,我们在定义f之后设置默认值。

装饰

这里有一个简单的装饰师为你做这个。注意,自变量必须最后,不同于方法,其中self是第一。这也意味着,如果任何其他参数采用默认值,则必须给出默认值。

def self_reference(f):

f.func_defaults = f.func_defaults[:-1] + (f,)

return f

@self_reference

def foo(verb, adverb='swiftly', self=None):

return '%s %s %s' % (self.subject, verb, adverb)

例:

>>> foo.subject = 'Fred'

>>> bar = foo

>>> del foo

>>> bar('runs')

'Fred runs swiftly'

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值