8.2 成员函数
定义在类内部的函数,就是成员函数,还可以叫做方法。
属性用来描述对象,而方法则是对象的动作、行为或者功能等。方法的调用,必须要有对象。
class Student: name="" id="" clazz="" def printName(self): print("名字是:"+self.name)s=Student()s.name="乔峰"s.printName() #必须要有对象才能调用printName
关于成员函数,有以下几点需要注意:
1.成员函数定义在类内部
2.成员函数的第一个参数必定是self,但是调用的时候忽略这个参数,此参数代表当前对象
3.成员函数内部可以通过self访问所有的属性和方法
类Student有三个属性,有一个函数printName,它还有一个参数self,这个参数在定义的时候必须有,但是调用的时候是要忽略的,不需要给出。这个self代表当前的对象,它可以取得当前对象的属性,例如第6行代码self.name
4.成员函数的调用必须有对象
s.printName的意义就是s的printName这个功能被调用,就好像电视遥控器的换台功能。我们不可能脱离电视机提高音量,在此,也不能脱离Student对象调用printName。
和普通函数不同的是,成员函数的调用必须有对象。
调用printName()的时候虽然是没有参数的,但是调用它需要对象,需要使用对象的name属性,哪个对象调用方法,self就是哪个对象,就使用哪个对象的name属性。如果没有对象是无法调用此函数的,将出现语法错误:
class Student: name="" id="" clazz="" def printName(self): print("名字是:"+self.name)stu=Student()stu.name='John'printName() #这行代码将出错,printName前必须有对象
类的行为是这个事物的功能或动作。类的行为就是方法,printName这个方法,就属于Student类的一个功能。
成员函数可以通过self这个预定义的隐藏变量使用所有属性。
通过对象调用方法,就是这个对象的行为和功能,而方法的调用,必定需要一个对象,否则这是谁的功能?谁的行为?方法内部使用的又是谁的属性?
stu.printName()这样的写法,意思就是使用stu的printName功能,必须要有对象
。
这和之前函数的调用有所不同,因为之前的函数调用全部都是静态的,并不需要对象。
self也可以用调用其他的成员函数,例如下面的代码第9行代码self.getId():
class Student: name="" id="" clazz="" def getId(self): return self.id def printName(self): print("id是"+self.getId()) #调用self(当前对象)的getId方法 print("名字是:"+self.name)stu=Student()stu.id='2023432143214'stu.name='John'stu.printName() #printName的self指的就是stustu2=Student()stu2.id='20224584598455'stu2.name='Peter'stu2.printName() #printName的self就是stu2
再来看一个例子,这是一个玩具车类:
class ToyCar: name='' kilo='' length='' color='' style='' def start(self): print(self.name+"开车!") def stop(self): print(self.name+"停车!") def turnLeft(self): print(self.name+"左转!") def turnRight(self): print(self.name+"右转!") def backup(self): print(self.name+"倒车!") def accelerate(self): print(self.name+"加速!") car = ToyCar()car.name="风起长林"car.start()car.accelerate()car.turnLeft()car.stop()
这些成员函数,就好像是遥控器上的功能按钮,按下哪个就执行对应的功能。