在Python中,类是用来描述对象的模板,每一个类可以创建很多个实例,而这些实例都是基于该模板创建出来的具体对象。一个类通常包含若干个函数,也就是方法,这些方法定义了类可以进行的操作。
其中,所有的实例方法都必须至少有一个形参,一般命名为self,表示创建的对象本身。它通常是实例方法的第一个参数,如果实例方法有多个参数,则self必须放在第一个位置。self参数代表将来要创建的对象本身,是实例方法的一个必备参数。
在类的实例方法中访问实例属性时,需要以self为前缀,这是因为实例方法是基于类的模板创建出来的,而使用self可以帮助实例方法找到它所对应的对象,从而访问和修改该对象的属性和方法。例如:
class Person:
def __init__(self, name):
self.name = name
def introduce(self):
print(f"My name is {self.name}.")
在上面的示例中,我们定义了一个名为Person的类,其中包括两个实例方法:__init__()
和introduce()
。在introduce()
方法中,我们使用self.name
来引用该实例所对应的name属性。
在外部通过对象名调用对象方法时,并不需要传递self参数,因为Python会自动将对象本身作为实参传入到self参数中。例如:
person = Person("Tom")
person.introduce() # 输出 "My name is Tom."
在上面的示例中,我们创建了一个Person类的实例person,并调用它的introduce()方法,这个方法不需要显式传递self参数,因为Python会自动将person对象传递给self参数。
但是,在外部通过类名调用对象方法时,则需要显式为self参数传值。在这种情况下,需要首先创建该类的实例对象,然后使用该实例对象来调用该方法,并将该实例对象作为self参数的值传入。例如:
person = Person("Tom")
Person.introduce(person) # 输出 "My name is Tom."
在上面的示例中,我们创建了一个Person类的实例person,并使用Person类的名称显式地调用了introduce()方法,同时将person对象作为self参数的值传入。
最后要注意的是,虽然在Python中定义实例方法时一般都将第一个参数定义为self,但实际上类的实例方法中第一个参数的名字是可以变化的。虽然可以改变self的名字,但由于习惯使然以及代码的可读性和可维护性,强烈建议始终将第一个参数命名为self。