Python学习手册之类和继承

在上一篇文章中,我们介绍了 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 = name

d1 = 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 = name
  self.eyes = eyes

d1 = 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 = name
  self.eyes = eyes

 def 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 = name
  self.eyes = eyes

d1 = 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 = id
  self.name = name

man = 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 = name
  self.sex = sex

class 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 = name
  self.sex = sex

 def 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

时间: 2024-10-01 13:53:27

Python学习手册之类和继承的相关文章

Python学习手册笔记

之前为了编写一个svm分词的程序而简单学了下Python,觉得Python很好用,想深入并系统学习一下,了解一些机制,因此开始阅读<Python学习手册(第三版)>.如果只是想快速入门,我在这里推荐了几篇文章,有其他语言编程经验的人简单看一看就可以很快地开始编写Python程序了. 黑体表示章节, 下划线表示可以直接在原文对应位置查到的专有技术名词. 原书配套答案请到http://www.hzbook.com/Books/4572.html下载,简单注册即可. 第三章 如何运行程序 impor

[读书]Python学习手册--属性管理1

属性管理-特性 一般开发这不必关心属性的实现,对工具的构建这来说,了解这一块对API的灵活性有帮助. 大多数情况下,属性位于对象自身之中,或者继承自对象所派生自的一个类. ----python学习手册 property property(fget=None, fset=None, fdel=None, doc=None) -> property attribute fget is a function to be used for getting an attribute value, and

《Python学习手册》读书笔记【转载】

转载:http://www.cnblogs.com/wuyuegb2312/archive/2013/02/26/2910908.html 之前为了编写一个svm分词的程序而简单学了下Python,觉得Python很好用,想深入并系统学习一下,了解一些机制,因此开始阅读<Python学习手册(第三版)>.如果只是想快速入门,我在这里推荐了几篇文章,有其他语言编程经验的人简单看一看就可以很快地开始编写Python程序了. 黑体表示章节, 下划线表示可以直接在原文对应位置查到的专有技术名词. 原书

python学习手册

1.GUI开发 python中界面开发使用wxPython库,开发手册 wxPytyhon in action; *  http://wiki.woodpecker.org.cn/moin/WxPythonInAction *  http://blogimg.chinaunix.net/blog/upfile2/090208120235.pdf python学习手册

global语句(python学习手册422页)

# -*- coding: cp936 -*- #python 27 #xiaodeng #global语句(python学习手册422页) #实际上就是一个名为__builtin__的模块,但是必须要import之后才能使用,因为变量名builtin本身并没有预先内置 #global语句,命名空间的声明,告诉python计划生成一个或多个全局变量. #全局变量名小结: #1.全局变量是位于模块文件内部的顶层的变量名 #2.全局变量如果是在函数内被赋值的话,必须要经过global声明 #3.全局

python学习手册——1介绍python对象类型

在python ,数据以对象的形式出现--无论是python提供的内置对象,还是使用python或是像C扩展库这样的扩展语言工具创建的对象.尽管在以后才能确定这一概念,但对象无非是内在中的一部分,包含数值和相关操作的集合. 由于对象是python 最基本的概念,从这一章开始我们将会全面地体验python的内置对象类型. python程序可以分解成模块,语句,表达式以及对象,如下所示: 1.程序由模块构成 2.模块包含语句 3.语句包含表达式 4.表达式建立并处理对象 为什么使用内置类型 1.内置

《Python 学习手册》笔记 1

今天看了 Udacity 的 iOS 学习路线介绍,作者的看法是,最好先学习 Swift,而不是 Objective-C,原因一方面是 Swift 要简单一些,另一方面是因为 Apple 打算用 Swift 作为将来的官方语言取代 OC. 大学里,编程语言课程就是 C 和 C++.我不知道这是谁定的,也许他们有足够充分的理由.但是对于大多数人来说,这两个语言——一个太底层,一个太复杂)其实不见得那么重要.还不如学学 Ruby 和 Python 这样的抽象度更高的解释性语言,易于使用,而且内置了强

python学习手册中的一些易忘的点(4-7部分)

有时间系统看一遍python学习手册,记录一些易忘点 1.python函数高聚合低耦合1)对于输入使用参数并且对于输出使用return2)只有在真正必要的情况下使用全局变量3)不要改变可变类型的参数,除非调用者希望这样做4)每个函数都应该有一个单一的.统一的目标5)每一个函数应该相对较小6)避免直接改变在另一个文件中的变量 2.递归处理任意结构>>> a=[3,[2,[2,3,4],2],1,[1,5,[1,3,3]]]>>> def sumtree(L):...  

分享《Python学习手册(第4版)》高清中文PDF+高清英文PDF+源代码

下载:https://pan.baidu.com/s/1b7P9O6cHVBqce83G-zoJew 更多资料:http://blog.51cto.com/3215120 <Python学习手册(第4版)>高清中文PDF+高清英文PDF+源代码 高清中文PDF,1162页,带书签目录,文字可以复制.高清英文PDF,1594页,带书签目录,文字可以复制.中英文两版对比学习.配套源代码. 其中,中文版如图: 原文地址:http://blog.51cto.com/3215120/2316529