如果我们在python中的类中创建任何方法,我们总是使用self作为第一个参数,但是在调用该方法时我们不传递?为什么?
输出:如果我们在python中的类中创建任何方法,我们总是使用self作为第一个参数,但是在调用该方法时我们不传递?为什么?,python,self,Python,Self,输出:在xyz中 在这里,当使用obj调用xyz时,self不是作为参数给出的,这是因为默认情况下,self是实例本身obj.xyz()相当于ABC.xyz(obj),这是因为self默认情况下是实例本身obj.xyz()相当于ABC.xyz(obj)每个类方法的第一个参数,包括\uuuuu init\uuuuu,始终是对类的当前实例的引用 按照惯例,此参数始终命名为self 在\uuuu init\uuuu方法中,self指的是新创建的对象;在其他实例方法中,它引用其方法被调用的实例。虽然在定
在xyz中
在这里,当使用
obj
调用xyz
时,self
不是作为参数给出的,这是因为默认情况下,self
是实例本身obj.xyz()
相当于ABC.xyz(obj)
,这是因为self
默认情况下是实例本身obj.xyz()
相当于ABC.xyz(obj)
每个类方法的第一个参数,包括\uuuuu init\uuuuu
,始终是对类的当前实例的引用
按照惯例,此参数始终命名为self
在\uuuu init\uuuu
方法中,self指的是新创建的对象;在其他实例方法中,它引用其方法被调用的实例。虽然在定义方法时需要显式指定self
,但在调用方法时不指定它;Python会自动为您添加它
了解有关
self
和的详细信息每个类方法的第一个参数,包括\uuuu init\uuuu
,始终是对类的当前实例的引用
按照惯例,此参数始终命名为self
在\uuuu init\uuuu
方法中,self指的是新创建的对象;在其他实例方法中,它引用其方法被调用的实例。虽然在定义方法时需要显式指定self
,但在调用方法时不指定它;Python会自动为您添加它
了解更多关于
自我的信息
,从技术上讲,就是这样:
obj
没有名为xyz
obj
的类(ABC
)中查找名为xyz
的属性,它确实具有该属性ABC.xyz
是一个函数,因此它将其“包装”到“实例方法”中。基本上,ABC.xyz
是一个只有一个参数的函数(self
),因此“实例方法”是一个从原始函数中减去一个参数的函数(在这种情况下没有参数),它会记住对象obj
。如果调用这个“实例方法”,它会将其传递到ABC.xyz
,第一个参数是obj
,其余参数是绑定方法的参数obj.xyz
计算到此实例方法ABC.xyz
,并将记住的实例(obj
)作为第一个参数\uuuu self\uuuu
属性是实例。[……]
及
实例方法
[……]
通过检索用户定义的
通过类的一个实例(它的\uuuuu self\uuuu
属性是实例,方法对象被称为绑定。
新方法的\uuu func\uu
属性是原始函数对象
[……]
调用实例方法对象时,底层函数
调用(\uuuuu func\uuuu
),将类实例(\uuuu self\uuu
)插入
在参数列表的前面。例如,当C
是一个
包含函数f()
的定义,x
是
C
,调用x.f(1)
相当于调用C.f(x,1)
[……]
从技术上讲,情况就是这样:
obj
没有名为xyz
obj
的类(ABC
)中查找名为xyz
的属性,它确实具有该属性ABC.xyz
是一个函数,因此它将其“包装”到“实例方法”中。基本上,ABC.xyz
是一个只有一个参数的函数(self
),因此“实例方法”是一个从原始函数中减去一个参数的函数(在这种情况下没有参数),它会记住对象obj
。如果调用这个“实例方法”,它会将其传递到ABC.xyz
,第一个参数是obj
,其余参数是绑定方法的参数obj.xyz
计算到此实例方法ABC.xyz
,并将记住的实例(obj
)作为第一个参数class ABC:
def xyz(self):
print "in xyz"
obj = ABC()
print obj.xyz()