python函数定义的时候默认参数放在哪_python函数的默认参数

qux被视为一个实例方法,因为这是看起来像函数的类成员的默认处理(更具体地说,当你看它时,Baz.qux有一个__get__被隐式调用以“绑定”第一个参数到实例通过实例).但是,您没有在开始时提供自我参数.因此,baz被绑定到x lambda参数.

Python中的“self”这个名字并不神奇;这只是惯例.方法绑定始终通过绑定到函数的第一个参数来工作.

如果你聪明的话,你可以亲眼看到这个:

class Baz(object):

qux = lambda x: x + '_quux'

def foo(self): return self.qux()

Baz().foo() # TypeError: unsupported operand type(s) for +: 'Baz' and 'str'

# because after binding Baz() to 'x', we get Baz() + '_quux'

一种解决方案是明确地将qux设为静态方法,如Sven Marnach的答案. (你也可以把它变成一个类方法,这是一个特定于Python的概念,它更强大; staticmethod更接近于像Java这样的语言中static static关键字的行为.)注意,就像在Java中一样,你也可以访问static方法foo中的self.qux.这可以通过用staticmethod安装的新机器替换普通的__get__机器来实现.

另一种解决方案是在lambda参数中提供self参数.如果你实际上不想要“静态”行为(即需要实际对自己做某事),这很有用 – 但它看起来就像你做的那样.为了完整起见,这看起来像:

qux = lambda self, x: x + '_quux'

def foo(self):

return self.qux('foo')

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值