python入门(六):类(创建和使用类,继承,父类与子类,模块化)

8.1.创建和使用类

我们要进行面向对象编程,我们编写基于现实世界的事物和情景的类,并给予这些类来创建对象。
编写类的时候,我定义一大类对象都有的通用行为,根据类来创建对象的过程就是实例化,每一个对象都会具备这种通用行为,面向对象编程可以模拟现实场景
使用类几乎可以模仿任何东西

8.1.1.创建Dog类

例如在此处我编写一个表示小狗的简单类Dog,这个类可以用来表示任何小狗,而不是特定的小狗
在这个例子中,我们赋予小狗蹲下和打滚的能力,同时小狗有自己的姓名和年龄
实际上我们也可以编写文本字符串对类的功能进行描述
在python中,首字母大写的名称称为类
在这里插入图片描述
在类中,有两种:一种是属性,一种是能力,名字和年龄就是属性,sit和roll_over就是能力
(1)方法_init_()
在这里插入图片描述

8.1.2.根据类创建实例

下面我们创建一个表示小狗的实例
在这里插入图片描述
我们通常可以认为首字母大写的名称如Dog指的是类,而小写字母如my_dog指的是根据类创建的实例
(1)访问属性
访问实例的属性,就是用句点表示法:
在这里插入图片描述
(2)调用方法
根据类来创建实例后,就可以使用句点表示法来调用类中定义的小函数
要调用方法/能力的时候,可以指定实例的名称(my_dog)和要调用的方法

在这里插入图片描述
我们称类中子函数为方法
要为属性和方法指定合适的描述性名称,这样我们即使没有看到代码块,也可以推断出来函数是干什么的。

(3)创建多个实例
实际上我们可以根据需求创建任意数量的实例,每一个实例都存储在不同的变量中,有着相应的属性,可以执行相应的方法(能力)
在这里插入图片描述
可以按需求根据一个类来创建任意数量的实例,条件是将每一个实例都存储在不同的变量中,或占用列表/字典的不同位置

8.2.使用类和实例

实际上,我们可以使用类来模拟现实世界中的很多情形,类编写好之后,修改实例的属性是一个很重要的任务,也就是要使用实例

8.2.1.Car类

在这里插入图片描述
属性本身就是来自于用户的输入,本身就是字符串,这点要记好

8.2.2.给属性指定默认值

类中的每一个属性都必须有初始值,往往是形参赋初始值,如果是0的话,就无需提供初始值的形参
在这里插入图片描述
注意:出售时里程表读数为0的汽车并不多,因此我们需要一个修改属性值的途径

8.2.3.修改属性的值

我们以使用三种不同的方式来修改属性的值

8.2.3.1.(1)直接修改属性的值

要修改属性的值,最简单的方式就是通过实例直接访问
在这里插入图片描述
在这个地方我们直接访问了属性并设置了汽车的属性(实际上就是直接修改了属性)

8.2.3.2. (2)通过方法修改属性的值

我们从外部直接访问属性确实是有些不好,我们在内部设置一个函数,在外部将实参传递进去,相当于间接在内部进行更新
在这里插入图片描述
在这里插入图片描述
这种禁止往回调显然很有必要

8.2.3.3. (3)通过方法对属性的值进行递增

加粗样式
注意细节,防止BUG

8.3.继承

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

8.3.1.子类的方法_init_()

在创建子类的实例的时候,python需要先给父类的所有属性赋值
在这里插入图片描述
创建子类的时候,父类必须包含在当前文件夹中,且位于子类的前面,在定义子类的时候,必须要在括号内指明父类的名称
super()是一个特殊函数,帮助python将父类与子类关联起来,
这个继承确实挺牛逼的

8.3.2.python中的继承

在这里插入图片描述

8.3.3.给子类定义属性和方法

单单是继承还不行,子类还应该具有独立的属性和方法
让一个类继承另一类后,可以添加区分子类和父类所需的新属性和方法
在这里插入图片描述

8.3.4.重写父类的方法

重写父类的方法可以让子类保存从父类那里继承而来的精华,而剔除不需要的糟粕
在这里插入图片描述

8.3.5.将实例用作属性

使用代码模拟实物的时候,你可能会发现自己给类添加的细节越来越多,属性和方法清单越来越长,需要把类的一部分作为一个独立的类提取出来,将大型类拆分成多个协同工作的小类
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

8.3.6.模拟实物

实物的模拟需要的不仅仅是语法层面,更是较高的逻辑层面
在这里插入图片描述

8.4.导入类

随着我们不断给类添加功能,代码可能会变得很长,即便我们使用了合适的继承也是如此,我们应该一如既往python的理念,让代码尽可能地简洁
python允许将类存储在模块中,然后在主程序中导入所需要的模块

8.4.1.导入单个类

下面这个是模块car.py,其中只包含Car类的代码
在这里插入图片描述
下面在另一个文件my_car.py,在其中导入Car类并创建其实例
在这里插入图片描述
导入类是一种有效的编程方式,如果在这个程序中包含了Car类,那该多长啊,通过将这个类移入一个模块,并导入该模块,我依然可以使用这个功能,主程序文件变得整洁同时易于阅读
这样就可以将大部分逻辑存储在独立的单元文件之中,在确定类像你希望的那样工作之后,你就可以不管这些事件,而更加专注于主程序的高层逻辑了

8.4.2.在一个模块中存储多个类

我们可以在同一个模块之中存储多个类,同一个模块中的类存在着相关性
在这里插入图片描述
我们再创建一个文件用于导入类
在这里插入图片描述

8.4.3.在一个模块中导入多个类

可以根据需要在程序之中导入任意数量的类
从同一个模块之中导入多个类的时候,用逗号分隔各个类
在这里插入图片描述

8.4.4.导入整个模块

和之前函数一样,我们可以导入整个模块,再使用句点表示法来表示访问所需要的类,这种导入方法很简单,代码也很容易阅读
在这里插入图片描述

8.4.5.导入模块中的所有类

在这里插入图片描述
需要从一个模块之中导入类的时候,最好导入整个模块,同时还要避免导入模块中的每个类可能引发的名称冲突

8.4.6.在一个模块中导入另一个模块

有时候,需要将类分散到多个模块之中,以避免模块过大,将类存储在多个模块中时,你可能会发现一个模块中的类依赖于另一个模块中的类,在这种情况下,可以在前一个模块之中导入必要的类
在这里插入图片描述
在这里插入图片描述

8.4.7.自定义工作流程

正如你看到的,在组织大型项目的代码方面,应该尽可能在一哥文件之中完成所有的工作,在确定一切可以正常运行之后,再将类移到独立的模块之中
如果你喜欢模块和文件的交互方式,可在项目开始时就尝试将类存储在模块之中
先找出让你能够编写出可行代码的方式,再尝试让代码组织的更加有序

8.5.python标准库

在这里插入图片描述

8.6.类编码风格

在这里插入图片描述

8.7.小结

在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值