在上一篇文章中,我们介绍了 Python 的函数式编程,现在我们介绍 Python 的类和继承。

查看上一篇文章请点击:https://www.cnblogs.com/dustman/p/10010690.html


先前,我们研究过两种编程范式--命令式(使用语句、循环和函数)和函数(使用纯函数、高阶函数和递归)。
接下来我们学习一个编程方式是面向对象编程 —— Object Oriented Programming,简称 OOP,这是一种程序设计思想。OOP 把对象作为程序的基本单元,类描述对象将是什么,一个对象包含了数据和操作数据的函数。
面向过程的程序设计把计算机程序视为一系列的命令集合,即一组函数的顺序执行为了简化程序设计,面向过程把函数继续切分为子函数,即把大块函数通过切割成小块函数来降低系统的复杂度。
而面向对象的程序设计把计算机程序视为一组对象的集合,而每个对象都可以接收其他对象发过来的消息并处理这些消息。计算机程序的执行就是一系列消息在各个对象之间传递。
类是使用关键字 class 和缩进块创建的,缩进块包含类方法(这些是函数)。

class Dog:def __init__(self,name): #__init__传参数self.name = named1 = Dog("张三")
d2 = Dog("李四")
d3 = Dog("王五")

数据封装、继承和多态是面向对象的三大特点。

__init__方法
__init__方法是类中比较重要的方法,它在创建类的实例(对象)时调用,这种方法创建的属性我们称为实例变量。
类中所有方法都必须将 self 作为它们的第一个参数,尽管它没有显式传递,但是 Python 将 self 参数添加到列表中。在调用方法时不需要包含它。在方法定义中,self 引用调用该方法的实例。类的实例具有属性,这些属性是与实例关联的数据。
在本例中,Dog 实例将具有 nameeyes 的属性。可以通过实例后面加点和属性名来访问这些值。同样,在 __init__ 方法中,可以使用 self.attribute 来设置实例属性的初始值。

class Dog:def __init__(self,name,eyes): #__init__传参数self.name = nameself.eyes = eyesd1 = Dog("张三",2)
d2 = Dog("李四",2)
d3 = Dog("王五",2)
print(d1.name)
print(d2.name)
print(d3.name)

特殊方法 __init__ 前后分别有两个下划线!
在上面的实例中,__init__ 方法接受两个参数,并将它们分配给对象的属性。__init__ 方法称为类构造函数。

方法
类可以定义其他方法用来添加一些功能。请记住,所有方法都必须将 self 作为它们的第一个参数。使用点加属性的语法来访问这些方法。

class Dog:def __init__(self,name,eyes): #__init__传参数self.name = nameself.eyes = eyesdef bulk(self):print("%s:wang wang wang!" %self.name)d1 = Dog("张三",2)
d2 = Dog("李四",2)
d3 = Dog("王五",2)d1.bulk()
d2.bulk()
d3.bulk()

运行结果:

>>>
张三:wang wang wang!
李四:wang wang wang!
王五:wang wang wang!
>>>

类属性一种是通过 __init__ 方法来定义,也可以自己直接定义类属性,这种属性我们叫它类变量。它是通过在类的主体内分配变量创建的。可以从类的实例或类本身访问它们。

class Dog:def __init__(self,name,eyes): #__init__传参数self.name = nameself.eyes = eyesd1 = Dog("张三",2)
d2 = Dog("李四",2)
d3 = Dog("王五",2)print(d1.name)
print(d2.name,d2.eyes)
print(d3.eyes)

运行结果:

>>>
张三
李四 2
2
>>>

类变量由类的所有实例共享。

尝试访问一个实例中未定义的属性或方法会导致 AttributeError 异常。

class Student:def __init__(self,id,name):self.id = idself.name = nameman = Student(10086,"China")
print(man.id)
print(man.sex)

运行结果:

>>>
10086
AttributeError: 'Student' object has no attribute 'sex'
>>>

继承
通过在两个类中共享函数实现继承。
想像以下有些类,比如 Cat, Dog, Rabbit。尽管它们有一些不同,但是它们都有颜色,名字属性。
这些相同点可以通过继承父类 Animal 来实现这些共享的属性方法。继承最大的好处是子类获得了父类的全部功能。

class Animal:def __init__(self,name,sex):self.name = nameself.sex = sexclass Cat(Animal):def talk(self):print('Neow!')func = Cat("ZS","F")
print(func.name)
func.talk()

运行结果:

>>>
ZS
Neow!
>>>

OOP 程序设计中,当我们定义了一个 class 的时候,可以从某个现有的 class 继承,新的 class 称为子类 (Subclass) , 而被继承的 class 称为基类、父类或超类 (Base class、Super class)。
如果一个子类拥有一个和父类相同的属性和方法,我们称为重写 (override)。在代码运行的时候,总是会调用子类的方法。

class Animal:def __init__(self,name,sex):self.name = nameself.sex = sexdef take(self):print("Hello...")class Cat(Animal):def talk(self):print('Neow!')func = Cat("ZS","F")
print(func.name)
func.talk()

运行结果:

>>>
ZS
Neow!
>>>

上面例子中 Animal 是父类,Cat 是子类。

子类同样可以做为父类被继承,这样继承的子类拥有两个父类的方法和属性。

class A:def func_A(self):print("A 类")class B(A):def func_B(self):print("B 类")class C(B):def func_C(self):print("C 类")obj = C()
obj.func_A()
obj.func_B()
obj.func_C()

运行结果:

>>>
A 类
B 类
C 类
>>>

注意:尽量不要循环继承。

方法 super 用来在子类中代指父类,可以用于在实例的父类中找到具有特定名称的方法。

class Animal:def msg(self):print("It's a dog!")class Cat(Animal):def talk(self):print('Neow!')super().msg()Cat().msg()

运行结果:

>>>
It's a dog!
>>>

Cat().msg() 调用父类的 msg 方法。

“你们纪念的只是过去,如果拉上你的各种同学到你面前,你们还是无话可说。”

转载于:https://www.cnblogs.com/dustman/p/10016359.html

Python学习手册之类和继承相关推荐

  1. python学习手册条件-总算晓得python学习手册正式版

    为了提高模块加载的速度,每个模块都会在__pycache__文件夹中放置该模块的预编译模块,命名为module.version.pyc,version是模块的预编译版本编码,一般都包含Python的版 ...

  2. python学习手册条件-Python学习手册(第4版)pdf

    Python学习手册(第4版) 内容简介 <Python学习手册(第4版)>学习Python的主要内建对象类型:数字.列表和字典.使用Python语句创建和处理对象,并且学习Python的 ...

  3. python学习手册中文版免费下载-Python学习手册

    Python学习手册第4 版将帮助你使用Python快速实现这一点,不管你是编程新手还是Python初学者.本书是易于掌握和自学的教程,根据作者Python专家Mark Lutz的著名培训课程编写而成 ...

  4. python学习手册中文版免费下载-Python学习手册 第三版

    <Python学习手册(第3版)>讲述了:Python可移植.功能强大.易于使用,是编写独立应用程序和脚本应用程序的理想选择.无论你是刚接触编程或者刚接触Python,通过学习<Py ...

  5. python学习手册中文版免费下载-Python学习手册(第3版)

    <Python学习手册(第3版)>为机械工业出版社出版. 目录 前言 第一部分 使用入门第1章 问答环节 人们为何使用Python 软件质量 开发者效率 Python是"脚本语言 ...

  6. python 学习手册重点

    ############################python学习手册 #第四章 1.python中增加**代表乘方 2.在python可以反向索引从-1开始, 3.python没有声明的说法, ...

  7. python基础语法手册-Python学习手册(第4版)pdf

    Python学习手册(第4版) 内容简介 <Python学习手册(第4版)>学习Python的主要内建对象类型:数字.列表和字典.使用Python语句创建和处理对象,并且学习Python的 ...

  8. python零基础学习书-Python零基础到进阶必读的书藉:Python学习手册pdf免费下载

    提取码:0oor Google和YouTube由于Python的高可适应性.易于维护以及适合于快速开发而采用它.如果你想要编写高质量.高效的并且易于与其他语言和工具集成的代码,<Python学习 ...

  9. python学习手册-Python学习手册

    Python学习手册第4 版将帮助你使用Python快速实现这一点,不管你是编程新手还是Python初学者.本书是易于掌握和自学的教程,根据作者Python专家Mark Lutz的著名培训课程编写而成 ...

  10. 《Python学习手册》读书笔记

    原文地址为: <Python学习手册>读书笔记 之前为了编写一个svm分词的程序而简单学了下Python,觉得Python很好用,想深入并系统学习一下,了解一些机制,因此开始阅读<P ...

最新文章

  1. c# 获取ajax数据,c# asp.net jQuery AJAX 从 MySQL 中获取数据
  2. 【Android NDK 开发】JNI 方法解析 ( 字符串数组参数传递 | 字符串遍历 | 类型强转 | Java 字符串与 C 字符串转换 | 字符串释放 )
  3. qt 中如何检测是否按下键盘(很实用)
  4. java中方法不调用会执行_java[新手]类里的方法没有调用为什么实现了?
  5. 巧做辅助线计算三角形角的度数
  6. win 二进制门安装mysql_MySQL5.7 windows二进制安装
  7. django使用Paginator分页展示数据
  8. android悬浮窗语音识别demo
  9. ov7740摄像头模块
  10. oracle生成流水号序列,Oracle序列生成订单流水号
  11. kappa一致性检验教程_一致性检验的几种方式--ICC、kappa、weighted kappa、Kendall
  12. 【笔记】笔记本查看电池损耗,一句命令搞定!(附笔记本电池使用技巧)
  13. NOI.6.08石头剪刀布
  14. 【影像组学pyradiomics教程】(七)影像组学特征
  15. 哈夫曼树【北邮机试】
  16. Cglib入门到使用
  17. 基于ARM Cortex-M3微控制器(STM32系列)基础知识(三)——ARM指令集
  18. 【图像去噪】基于小波阈值实现图像去噪matlab代码
  19. Java开发三层架构
  20. 手机桌面便签app哪个比较好用

热门文章

  1. 对字典转模型模块的理解
  2. Oracle SQL查询,日期过滤条件要注意的一点
  3. 怎么给图片或视频添加夜视效果?
  4. iOS对象的归档和解档-Runtime实现
  5. 微信公众号采坑之授权config
  6. 图片处理和验证码识别
  7. 经典Python面试题之数据库和缓存
  8. Silverlight Quick Starts翻译(二):第一章 创建一个Silverlight工程
  9. buildroot 使用本地交叉编译器记录
  10. nagios 流量监控和报警的shell脚本