在定义类的过程中,无论是显式的创建类的构造方法,还是向类中添加实例方法,都要将self参数作为方法的第一个参数。
1 2 3 4 5 | class Person: def __init__(self): print("正在执行构造方法") def study(self, name): print(name, "正在学python") |
1 | python类方法中的self参数就相当于C++中的this指针。 |
同一个类可以产生多个对象,当某个对象调用类方法时,该对象会把自身的引用作为第一个参数自动传给该方法,换句话说,python会自动绑定类方法的第一个参数指向调用该方法的对象。
如此,python解释器就能知道到底要操作哪个对象的方法了。
程序在调用实例方法和构造方法时,不需要手动为第一个参数传值。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | class Person: def __init__(self): print("正在执行构造方法") def study(self): print(self, "正在学python") xiaobai = Person() xiaobai.study() mary = Person() mary.study() #执行结果 #study()中的self代表该方法的调用者,即谁调用该方法,那么self就代表谁。 正在执行构造方法 <__main__.Person object at 0x0000013B6A24BA58> 正在学python 正在执行构造方法 <__main__.Person object at 0x0000013B6A24BC88> 正在学python |
对于构造函数中的self参数,其代表的是当前正在初始化的类对象。
1 2 3 4 5 6 7 8 9 10 11 | class Person: name = "xiaobai" def __init__(self, name): self.name = name mary = Person("mary") print(mary.name) lisa = Person("lisa") print(lisa.name) #执行结果 mary lisa |
总之,无论是类中的构造函数还是普通的类方法,实际调用它们的是谁,则self就代表谁。