在Python中定义方法时,会经常用到self,如何理解self?其实很简单,只需要区分两个概念,“类变量”和“对象”,而self指代的是“对象”。
以代码说明,例如定义Person类:
class Person:
def __init__(self,name):
self.name = name
def play(self):
print('{} is playing'.format(self.name))
实例化一个对象
andy = Person('andy')
代码中的self是一个保存Person对象的变量,而play是一个属于Person类的函数,因此可以这样调用play函数:
>>> Person.play(andy)
andy is playing
在实例化对象的时候,程序就自动创建了andy的play方法,因此也可以这样调用:
>>> andy.play()
andy is playing
要注意的是,Person.play是Person中的函数,而andy.play是与andy绑定的方法,二者不是同一个实体:
>>> Person.play
<function Person.play at 0x000002B32A005940>
>>> andy.play
<bound method Person.play of <__main__.Person object at 0x000002B329F76B20>>
>>> andy
<__main__.Person object at 0x000002B329F76B20>
此外,在定义类方法时,用其它变量名代替self也是可以的,self并不是一个python关键字,例如:
class Person:
def __init__(myself,name):
myself.name = name
def play(myself):
print('{} is playing'.format(myself.name))