pythonself函数意义_为什么python中的函数/方法需要self作为参数?

如果你考虑一下,每种编程语言都会这样做——或者至少,像pascal、c++或java这样最常见的语言都会这样做)。但是,在大多数编程语言中,this关键字是假定的,而不是作为参数传递的。考虑一下这些语言中的函数指针:它们与方法指针不同。在

帕斯卡:function(a: Integer): Integer;

^{pr2}$

后者考虑self指针(是的,它的名称是self,但它是一个隐式指针,类似于c++中的this,而pythonself是显式的)。在

C++:typedef int (*mytype)(int a);

与typedef int Anyclass::(*mytype)(int a);

与Pascal的差异,在C++中,必须指定拥有该方法的类。无论如何,这个方法指针声明声明了一个函数与一个不需要this的函数之间的区别。在

但是Python很认真,就像quichua人对待他们的Ama Suway,Ama Llullay,Ama K'ellay一样Explicit is better than implicit.

所以,这就是为什么您看到显式地为实例方法和@classmethod的self参数(当然必须编写它)(尽管它通常被称为cls,因为它的目的是动态地知道类而不是实例)。Python不假定方法中必须存在this或self关键字(因此,名称空间只有真正的变量-请记住,您不必将它们命名为self或{},尽管这是通常和预期的)。在

最后,如果您得到:x = AClass.amethod #unbound method

你必须称之为x(aninstance, param, param2, ..., named=param, named2=param2, ...)

而得到的结果是:x = anInstance.method #bound method, has `im_self` attribute set to the instance.

必须称为:x(param, param2, ..., named=param, named2=param2, ...)

是的,self在参数列表中是显式的,因为它不假定关键字或“后门”必须存在,但在参数列表中不存在,因为每个OOP语言都有语法糖分(奇怪的标准,哈?)。在

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值