Python编程:面向对象程序设计,掌握类和对象的定义和使用

本文的文字及图片来源于网络,仅供学习、交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理

本文章来自腾讯云 作者:背雷管的小青年

想要学习Python?有问题得不到第一时间解决?来看看这里“1039649593”满足你的需求,资料都已经上传至文件中,可以自行下载!还有海量最新2020python学习资料。
点击查看

在这里插入图片描述

一、目的与要求

1、了解面向对象编程思想,掌握类和对象的定义和使用。

2、熟悉self的使用技巧,掌握构造方法的使用。

3、了解如何使用封装保护属性,掌握单继承和多继承的使用。

4、掌握类属性和实例属性的使用,熟悉类方法和静态方法的使用技巧。

二、原理

在程序中使用对象来映射现实中的事物,使用对象间的关系来描述事物之间的联系,这种思想就是面向对象。面向对象编程有两个非常重要的概念:类和对象。对象是面向对象编程的核心。具有相似特征和行为的事物的集合统称为类,对象是根据类创建的,一个类可以对应多个对象。类是由3部分组成的:(1)类的名称:类名,首字母必须大写,比如Person;(2)类的属性:一组数据,比如性别;(3)类的方法:允许进行操作的方法,比如说话。使用class关键字来声明一个类,基本格式如下:

class 类名:

类的属性

类的方法

根据类创建对象的语法格式如下:

对象名 = 类名()

要想给对象添加属性,可以通过如下方式:

对象名.新的属性名 = 值

构造方法指的是__init__方法。当创建类的实例的时候,系统会自动调用构造方法,从而实现对类进行初始化的操作。当删除一个对象来释放类所占用资源的时候,Python解释器默认会调用另外一个方法,这个方法就是__del__(
)方法。__del__方法被称为析构方法。

在方法的列表中,第1个参数永远都是self。self的字面意思是自己,我们可以把它当做C++里面的this指针理解,表示的是对象自身。当某个对象调用方法的时候,Python解释器会把这个对象作为第1个参数传给self,开发者只需要传递后面的参数就可以了。

运算符重载是通过实现特定的方法使类的实例对象支持Python的各种内置操作。例如:+运算符是类里提供的__add__这个函数,当调用+实现加法运算的时候,实际上是调用了__add__方法。加法运算是通过调用__add__方法完成重载的,当两个实例对象执行加法运算时,自动调用__add__方法。跟索引相关的重载方法包括如下3个:getitem:索引、分片;setitem:索引赋值;delitem:索引和分片删除。在对实例对象执行索引、分片或者for迭代操作时,会自动调用__getitem__方法;通过赋值语句给索引或者分片赋值时,调用__ setitem __方法实现对序列对象的修改;当调用del方法时,实质上会调用__delitem__方法实现删除操作。

为了保护类里面的属性,可以采用如下方式解决:1.把属性定义为私有属性,即在属性名的前面加上两个下划线;2.添加用于设置或获取属性值的两个方法供外界调用。此即为封装。在程序中,继承描述的是事物之间的所属关系。类的继承是指在一个现有类的基础上构建一个新的类,构建出来的新类被称作子类。Python程序中,继承使用如下语法格式标注:

class 子类名(父类名):

Python支持多继承,多继承就是子类拥有多个父类,并且具有它们共同的特征,即子类继承了父类的方法和属性。多继承可以看做是单继承的扩展,语法格式如下:

class 子类名(父类1,父类2…):

如果子类继承的多个父类间是平行的关系,子类先继承的哪个类就会调用哪个类的方法。在继承关系中,子类会自动拥有父类定义的方法,但是有时子类想要按照自己的方式实现方法,即对父类中继承来的方法进行重写,使得子类中的方法覆盖掉跟父类同名的方法。需要注意的是,在子类中重写的方法要和父类被重写的方法具有相同的方法名和参数列表。在Python中,多态指在不考虑对象类型的情况下使用对象,它不关注对象的类型,而是关注对象具有的行为。

类属性是类所拥有的属性,它需要在类中进行显示地定义(位于类内部,方法的外面),它被所有类的实例对象所共有,在内存中只存在一个副本。通过“实例.属性”添加属性的属性都是实例属性。

使用修饰器@classmethod来标识类方法。要想调用类方法,既可以通过对象名调用类方法,又可以通过类名调用类方法,这两种方法没有任何区别。
在这里插入图片描述

三、预习与准备

1、提前预习Python面向对象编程思想的基础语法知识,实验之前编写好程序代码。

2、练习关于Python面向对象编程的常见编程技巧。

四、实验内容

实验题1 分析程序运行结果:阅读下面的程序,分析代码是否能够编译通过。如果能编译通过,请列出运行的结果,否则请说明编译失败的原因。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
实验题2
设计一个课程类,包括课程编号、课程名称、任课教师、上课地点等属性,把上课地点变量设为私有的,增加构造方法和显示课程信息的方法。

源码:

class ClassInfo:
    def __init__(self,classnumber,classname,teacher,adress):
        self.classnumber=classnumber
        self.classname=classname
        self.teacher=teacher
        self.__adress=adress
    def __str__(self):
        print("课程编号:%d\n课程名称:%s\n任课老师:%s\n" \
               "上课地点:%s"%(self.classnumber,self.classname,self.teacher,self.__adress))
        return "课程编号:%d\n课程名称:%s\n任课老师:%s\n" \
               "上课地点:%s"%(self.classnumber,self.classname,self.teacher,self.__adress)
myclass=ClassInfo(1111,"Python程序设计","阿意","S2020")

在这里插入图片描述
实验题3
设计一个表示学生(Student)的类,该类的属性有姓名(name)、年龄(age)、成绩(scores)(成绩包括语文、数学和英语三科成绩,每科成绩的类型为整数),另外有3个方法。

(1)获取学生姓名的方法:get_name(),返回类型为String()。

(2)获取学生年龄的方法:get_age()方法,返回类型为int。

(3)返回3门科目中最高的分数:get_course(),返回类型为int。

源码:

class Student:
    def __init__(self, name, age, score):
        self.name = name
        self.age = age
        self.score = score

    def get_name(self):
        return self.name

    def get_age(self):
        return int(self.age)

    def get_course(self):
        # print(self.score.values())
        a = list(self.score.values())
        # print(a)
        return max(a)


student_01 = Student("张明明", 25, {'语文': 56, '数学': 100, '英语': 99})
# score = {'语文': 118, '数学': 88, '英语': 122}
# student_01 = Student("张明明", 25, [56, 100, 99])
# 高阶函数:sorted
print(student_01.get_name())
print(student_01.get_age())
print(student_01.get_course())

在这里插入图片描述
实验题4
设计一个表示动物(Animal)的类,该类包括颜色(color)属性和叫(call)方法。再设计一个表示鱼(Fish)的类,包括尾巴(tail)和颜色(color)两个属性,及叫(call)方法。

提示:让Fish类继承自Animal类,重写__init__()和call方法。

源码:

class Animal(object):
    def __init__(self,color):
self.color=color
 def call(self):
 print("动物叫。。。")

class Fish(Animal):
 def __init__(self,color):
 super().__init__(color)
 self.tail=True
 def call(self):
 print("%s的鱼在吐泡泡"%self.color)
fish=Fish("蓝色")
fish.call()
animal=Animal("白色")
animal.call(

在这里插入图片描述

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值