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后设置默认值.

装饰

这是一个简单的装饰师为你做这件事.请注意,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、付费专栏及课程。

余额充值