十,python面向对象的编程

1,类定义(相当于多个函数集合的定义)

例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
            


        2,创建类对象(相当于函数的调用)   

rect = Rectangle(3,5)    #创建Rectangle的对象(具体即实参)rect,即将属性参数传递给实例属性,并将结果赋值给对象rect
print('此矩形的宽为:',rect.width)
print('此矩形的高位:',rect.height)
print('此矩形的面积:',rect.getArea())        #请注意函数后面要添加小括号
print('此矩形的周长:',rect.getPerimeter())

3,类的属性(变量)

(1)实例属性,在方法内部通过’self,属性变量名‘定义和访问的变量(在外部通过’对象名,变量名‘名访问)。
(2)类属性:在所有方法之外定义的属性(变量)

4,类的方法(函数)

(1)定义,与类相关的函数。

(2)类型:实例方法类方法,静态方法。

(3)实例方法:至少包含一个对象参数,在内部通过self。方法()‘调用,在外部通过’对象名。方法()调用。

5,类的继承与重写

(1)继承:子类继承父类的方法。
(2)重写:子类可以重写父类的方法(方法名称相同)。

案例如下:

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()

6,综合案例分析

(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()


 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值