一、类的定义(相当于多个函数集合的定义)
例8.1定义一个矩形类,包含两个数据成员(属性参数):宽度和高度:该类提供两种方法(功能函数):求面积和周长
In [9]:
class Rectangle: #定义一个类,类名为Rectangle def __init__(self,width,height): #定义初始化方法(函数),三个参数(属性),至少有self一个参数(形参) self.width = width #定义参数变量方法(给实例属性赋值) self.height = height def getArea(self): #定义一个函数求面积 S = self.width * self.height #根据公示求面积值 return S #返回函数值 def getPerimeter(self): #定义一个函数功能求周长 C = (self.width+self.height)*2 #根据公式求周长 return C
二、创建类对象(相当于函数的调用)
In [10]:
rect = Rectangle(3,5) #创建Rectangle的对象(具体值即实参)rect,即将属性参数传递给实力参数,并将结果赋值给对象rect
In [11]:
print('此矩形的宽为:',rect.width) print('此矩形的高为:',rect.height) print('此矩形的面积:',rect.getArea()) #请注意函数后面要添加小括号 print('此矩形的周长:',rect.getPerimeter())
此矩形的宽为: 3 此矩形的高为: 5 此矩形的面积: 15 此矩形的周长: 16
三、类的属性(变量)
四、类的方法(函数)
1.定义:与类相关的函数 2、类型:实例方法,类方法,静态方法 3、实例方法:至少包含一个对象参数,在内部通过'self.方法()'调用,在外部通过'对象名.方法()'调用
五、类的继承与重写
1、继承:子类继承父类的方法 2、重写:子类可以重写父类的方法(方法名称相同) 3、示例如下:
In [22]:
class Person: def __init__(self,name,age,sex): self.name = name self.age = age self.sex = sex def working(self): print(self.name,'正在工作!') def show(self): print('姓名: {}\n年龄:{}\n性别:{}\n'.format(self.name,self.age,self.sex)) class Student(Person): #定义子类Student继承父类Person def __init__(self,name,age,sex,major): super().__init__(name,age,sex) #继承父亲(请用父类初始化方法),借用super()内置函数 self.major = major def show(self): #重写父类方法 Person.show(self) #继承父类 print('专业: ' ,self.major) #添加额外行为
In [24]:
s = Student(name = '张三',age = '20',sex = '男',major = '通信学院智联网') #给子类创建对象 s.working() s.show()
张三 正在工作! 姓名: 张三 年龄:20 性别:男 专业: 通信学院智联网
六、综合案例(P177-P178)
1、定义一个父类Student和两个子类LevelSt和PassSt,在父类中定义2个实例变量和5个方法,使子类继承父类的所有属性和方法,并个自定义根成绩计算等级和判断是否通过的方法;同时,将代码存储在student.py文件中 2、显示由LevelSt和PassSt类对象构成的学生成绩列表,以及所有学生名字和成绩,并按字典排列
In [26]:
#创建文件student.py #定义student父类 class Student: def __init__(self,name='',grade=0): self.name=name self.grade=grade def setName(self,name): self.name=name def setGrade(self,grade): self.grade=grade def getName(self): return self.name def show(self): print('%s\t %s'%(self.name,self.calcLevel())) class LevelSt(Student): def calcLevel(self): if self.grade>=90: return'A' elif self.grade>=80: return 'B' elif self.grade>=70: return 'C' elif self.grade>=60: return 'D' else: return 'E' #定义student子类(根据成绩判断是否通过) class PassSt(Student): def calcLevel(self): #类的多态,和前面类的函数名称相同,但功能不同 if self.grade>=60: return '通过' else: return '不通过'
In [ ]:
#定义列表函数list_St存放学生数据 def list_St(): listOfSt=[] is_continue='Y' while is_continue in['Y','y','YES','yes'] name=input('请输入名字:') grade=float(input('请输入成绩:')) choice=input('请选择(L or P):') if choice.upper()=='L': s=LevelSt(name.grade) else: s=PassSt(name,grade)