定义一个People类,类中有两个基本属性:姓名(name)、性别(sex),一个私有属性:年龄(age);类中有三个方法:一个构造函数,一个getInfo函数(输出基本信息)和一个 getAge函数(返回age的值) 然后定义一个Student类,继承People类,并添加grade这一基础属性,在getInfo方法中输出类中属性的全部信息。
初始代码如下:
class People: name='' sex='' __age=0 def __init__(self,n,s,a): self.name=n self.sex=s self.__age=a def getInfo(self): print("我的名字是{},性别{},年龄{}".format(self.name,self.sex,self.__age)) def getAge(self): return self.__age class Student(People): grade=0 def __init__(self,n,s,a,g): People(n,s,a) self.grade=g def getInfo(self): print("我的名字是{},性别{},年龄{},成绩是{}".format(self.name,self.sex,self.getAge(),self.grade)) if __name__ == '__main__': stu=Student('liMing','male',19,98) stu.getInfo()运行代码结果如下:
age作为People类的私有属性,无法被子类直接访问。
将Student类中getInfo函数的self.__age修改为self.getAge(),如下:
def getInfo(self): print("我的名字是{},性别{},年龄{}".format(self.name,self.sex,self.getAge()))运行代码,结果如下:
将Student类的构造方法中的People(n,s,a)修改为People.init(n,s,a),即:
def __init__(self,n,s,a,g): People.__init__(n,s,a) self.grade=g运行代码,结果如下:
报错信息显示构造函数需要参数a的值。初始看到报错信息我也一头雾水,比对函数后,发现少了参数。
将Student类的构造方法中的People.init(n,s,a)修改为People.init(self,n,s,a)。
运行结果:
这个实例不得不让我承认我是一个bug圣手了。同时我更加明白了动手敲代码的重要性,有些理论知识比较简单,自以为自己懂了,但是一实践就发现漏洞百出。 所以还是要多实战!!!