【Python】学习笔记之类|第8篇

书籍:《Python编程:从入门到实践》
打卡人:Owenli
打卡时间:2018.4.17

Python从入门到实践目录

前言

面向对象编程 是最有效的软件编写方法之一。在面向对象编程中,你编写表示现实世界中的事物和情景的类,并基于这些类来创建对象。编写类时,你定义一大类对 象都有的通用行为。基于类创建对象 时,每个对象都自动具备这种通用行为,然后可根据需要赋予每个对象独特的个性。使用面向对象编程可模拟现实情景,其逼真 程度达到了令你惊讶的地步。
根据类来创建对象被称为实例化 ,这让你能够使用类的实例。在本章中,你将编写一些类并创建其实例。你将指定可在实例中存储什么信息,定义可对这些实例执行 哪些操作。你还将编写一些类来扩展既有类的功能,让相似的类能够高效地共享代码。你将把自己编写的类存储在模块中,并在自己的程序文件中导入其他程序员编 写的类。

一、创建和编写类

Dog类为例,创建一个包含名字和年龄,具有蹲下和打滚能力的类。

Dog

类中的函数称为方法,前面学习有关函数的内容在这里都适用。感到困惑的方法,应该就是 __init__()方法。它是一个特殊方法,每当创建实例时都会自动运行它。

我们将方法__init__() 定义成了包含三个形参:selfnameage 。在这个方法的定义中,形参self 必不可少,还必须位于其他形参的前面。为何必须在方法定义中包 含形参self 呢? 因为Python调用这个__init__()方法来创建Dog 实例时,将自动传入实参self。每个与类相关联的方法调用都自动传递实参self,它是一个指向实例本身 的引用,让实例能够访问类中的属性和方法。我们创建Dog 实例时,Python将调用Dog类的方法__init__() 。我们将通过实参向Dog() 传递名字和年龄;self 会自动传递,
因此我们不需要传递它。每当我们根据Dog 类创建实例时,都只需给最后两个形参(name 和age )提供值。

1.1 根据类创建实例

上面定义了Dog类,下面看看如何创建Dog实例。

创建实例my_dog。在打印实例信息时,通过使用.语法来访问属性名。

访问方法,也是通过.语法。

my_dog.sit()
my_dog.roll_over()

类创建实例的个数是不受限制的,可按需求根据类创建任意数量的实例。每个实例之间会不影响,存在不同的内存地址中。

二、使用类和实例

修改类属性的方法,可以直接修改实例属性,也可以编写方法以特定的方式进行修改。

下面定义一个Car类。

2.1 给属性指定默认值

类中的每个属性都必须有初始值,哪怕这个值是0或空字符串。设置初始值,可以在__init__()内指定这种初始值,这样就不用设置形参了。

还是上面的Car类,添加一个odometer_reading属性,并设置默认值为0。

image.png

添加了一个read_odometer()方法用来打印里程信息。

2.2. 修改属性值

汽车里程是随着使用,逐渐递增的。如何修改属性值呢?

  • 直接修改属性值
my_new_car.odometer_reading = 23
my_new_car.read_odometer()
#  输出结果: This is has 23 miles on it.
  • 通过方法修改属性值
class Car():
      # ....
      def update_odometer(self, mileage):
            """将里程数设为指定值,递增"""
            self.odometer_reading += mileage

my_new_car.update_odometer(34)
my_new_car.read_odometer()
# 输出结果: This is has 34 miles on it.

通过使用update_odometer()方法来更新属性的值。

三、继承

编写类时,并非总是要从空白开始。如果你要编写的类是另一个现成类的特殊版本,可使用继承 。一个类继承 另一个类时,它将自动获得另一个类的所有属性和方法;原有的 类称为父类 ,而新类称为子类 。子类继承了其父类的所有属性和方法,同时还可以定义自己的属性和方法。

3.1 子类的方法__init__()

创建子类的实例时,Python首先需要完成的任务是给父类的所有属性赋值。因此, 需要在初始化方法调用父类的初始化方法。

在上面我们定义了Car类,通过继承定义一个ElectricCar电动车类。

上面定义了ElectricCar类继承自Car。子类拥有父类所有的属性和方法。

在子类的初始化方法中super()是一个特殊函数,帮助Python将父类和子类关联起来。

3.2 给子类定义属性和方法

让一个类继承另一个类后,可添加区分子类和父类所需的新属性和方法。

根据ElectricCar创建的实例都会有这个属性,而Car的实例没有。

3.3 重写父类方法

对于父类的方法,只要它不符合子类模拟的实际行为,都可对其进行重写。

    def get_descriptive_name(self):
         """打印名称"""
        long_name = str(self.year) + ' ' + self.make + ' ' + self.model + ' ' + self.battery_size
        return long_name.title()

重写父类get_descriptive_name()多打印battery_size信息。

3.4 实例做属性

使用代码模拟实物,随着细节的增加需要代码越来越多。这种情况下可以将类中一部分提取出来,组合成多各类协作的方式。

添加Battery类,负责电池管理。它的实例是ElectricCar类的一个属性。

四、小结

本篇学习Python中类的概念,如何创建类、属性、方法以及类继承等相关知识。由于篇幅问题,下篇继续学习类剩下的内容。

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

推荐阅读更多精彩内容