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

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

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

私信小编回复01可领取学习资料以及学习视频

一、目的与要求

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(

在这里插入图片描述
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 215,723评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,003评论 3 391
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 161,512评论 0 351
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,825评论 1 290
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,874评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,841评论 1 295
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,812评论 3 416
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,582评论 0 271
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,033评论 1 308
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,309评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,450评论 1 345
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,158评论 5 341
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,789评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,409评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,609评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,440评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,357评论 2 352

推荐阅读更多精彩内容