# 一、类的定义(相当于多个函数集合的定义)
例8.1定义一个矩形类,包含两个数据成员(属性参数):宽度和盖度;该类提供两种方法(功能函数):求面积和周长
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
# 二、创建类对象(相当于函数的调用)
rect = Rectangle(3,5)
#创建Rectangle的对象(具体值即实参)rect,即将属性参数传递给实例属性,并将结果赋值给rect
print('此矩形的宽为:',rect.width)
print('此矩形的高为:',rect.height)
print('此矩形的面积:',rect.getArea()) #请注意函数后面添加小括号
print('此矩形的周长:',rect.getPerimeter())
# 三、类的属性(变量)
1、实例属性,在方法内部通过’self,属性变量名‘定义和访问的变量(在外部通过’对象名,变量名‘名访问)
2、类属性:在所有方法之外定义的属性(变量)
# 四、类的方法(函数)
1、定义,与类相关的函数
2,类型:实例方法,类方法,静态方法
3,实例方法:至少包含一个对象参数,在内部通过’self。方法()‘调用,在外部通过’对象名。方法()‘调用。
# 五、类的继承与重写
1、继承:子类继承父类的方法
2、重写:子类可以重写父类的方法(方法名称相同)
3、示例如下:
class Person: #定义一个父类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) #添加额外行为
s = Student(name='张三',age='20',sex='男',major='通信学院智联网') #给予子类创建对象
s.working()
s.show()
运行结果:
# 六、综合案例分析
1、定义一个父类Student和两个子类LevelSt和PassSt,在父类中定义2个实例变量和5个方法,使子类继承父类的所有属性和方法,并各自定义根据成绩计算等级和判断是否通过两个方法:同时将代码储存在student.py文件中
2、显示由LevelSt和PassSt类对象构成学生成绩列表,以及所有学生名字和成绩,并按字典排列
#定义student父类
class Student:
def __init__(self,name,grade):
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()))
#定义student子类(根据成绩计算等级)
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 '不通过'
#定义列表函数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)
listOfSt.append(s) #给列表listOfSt追加元素
is_continue = input('继续?(y/n):')
return listOfSt
#定义显示处理后的学生数据
def display(listOfSt):
print('\n姓名 \t 等级')
listOfSt.sort(key = lambda x:x.getName()) #将列表元素按字典排列
for each in listOfSt:
each.show()
#定义主函数
def main():
listOfSt = list_St()
display(listOfSt)
if __name__ == '__main__': #如果main主函数为脚本代码执行下面的主函数
main()
运行结果如下: