python继承

Python入门到精通三天速成第二讲——类与继承

吃可爱长大的小学妹 提交于 2020-02-09 03:18:56
子类扩展了超类(父类)的定义。要指定超类,可在 class 语句中的类名后加上超类名,并将其用圆括号括起。 class Filter: def init(self): self.blocked = [] def filter(self, sequence): return [x for x in sequence if x not in self.blocked] class SPAMFilter(Filter): # SPAMFilter是Filter的子类 def init(self): # 重写超类Filter的方法init self.blocked = ['SPAM'] Filter 是一个过滤序列的通用类。实际上,它不会过滤掉任何东西。 >>> f = Filter() >>> f.init() >>> f.filter([1, 2, 3]) [1, 2, 3] Filter 类的用途在于可用作其他类(如将 'SPAM' 从序列中过滤掉的 SPAMFilter 类)的基类(超类)。 >>> s = SPAMFilter() >>> s.init() >>> s.filter(['SPAM', 'SPAM', 'SPAM', 'SPAM', 'eggs', 'bacon', 'SPAM']) ['eggs', 'bacon'] 请注意 SPAMFilter

第三章:类与继承(Ⅱ)

99封情书 提交于 2020-02-09 01:28:44
这篇文章是基于 《Effective Python——编写高质量Python代码的59个有效方法》[美] 布雷特·斯拉特金 著 爱飞翔 译 这本书中的内容,写写自己在某方面的感悟,并摘录一些作为读书笔记供今后鞭策。侵删。 第 24 条:以 @classmethod 形式的多态取通用地构建对象 在 python 中,不仅对象支持多态,类也支持多态,那么类的多态是什么意思呢? 多态,使得继承体系中多个类都能以各自所独有的方式来实现某个方法。这些类,都满足相同的接口或继承自相同的抽象类,但却有着不同的功能。 例如,为了实现一套 MapReduce 流程,我们需要定义公共基类来表示输入的数据。下面这段代码就定义了这样的基类,它的 read 方法必须由子类来实现。 In [ 1 ] : class InputData ( object ) : . . . : def read ( self ) : . . . : raise NotImplementedError . . . : In [ 2 ] : class PathInputData ( InputData ) : . . . : def __init__ ( self , path ) : . . . : super ( ) . __init__ ( ) . . . : self . path = path . . . : def

python--类的继承

两盒软妹~` 提交于 2020-02-08 16:50:56
继承基础 继承的优点 新类不用从头编写,复用已有代码 新类从现有的类继承,就自动拥有了现有类的全部功能 新类只需要编写现有类缺少的功能 继承的特点 子类和父类是一个is关系 class person(object): pass class student(person): pass p = person() s = student() p是一个person,p不是一个student s是一个person,s也是一个student 总是要从某个类继承,没有就object super.__init__() 此方法用于初始化父类 def __init__(self,args): super(Subclass,self).__init__(args) pass 错误的继承 student和book是has关系 class student(book): pass has关系应该使用组合而非继承 class person(object): pass class book(object): def __init__(self,name): self.name = name class student(person): def __init__(self,bookName): self.book = book(bookName) 如果已经定义了Person类

python中函数和方法的区别

我的梦境 提交于 2020-02-08 01:37:51
本篇内容主要介绍从几个维度来介绍下python中函数和方法的区别: 首先,从分类的角度来分析。 (1)函数的分类: 内置函数:python内嵌的一些函数。 匿名函数:一行代码实现一个函数功能。 递归函数 自定义函数:根据自己的需求,来进行定义函数。 (2)方法的分类: 普通方法:直接用self调用的方法。 私有方法:__函数名,只能在类中被调用的方法。 属性方法:@property,将方法伪装成为属性,让代码看起来更合理。 特殊方法(双下划线方法):以__init__为例,是用来封装实例化对象的属性, 只要是实例化对象就一定会执行__init方法 ,如果对象子类中没有则会寻找父类(超类),如果父类(超类)也没有,则直接继承object(python 3.x)类,执行类中的__init__方法。 类方法:通过类名的调用去操作公共模板中的属性和方法。 静态方法:不用传入类空间、对象的方法, 作用是保证代码的一致性,规范性,可以完全独立类外的一个方法,但是为了代码的一致性统一的放到某个模块(py文件)中。 其次,从作用域的角度来分析: (1)函数作用域:从函数调用开始至函数执行完成,返回给调用者后,在执行过程中开辟的空间 会自动释放 ,也就是说函数执行完成后,函数体内部通过赋值等方式修改变量的值不会保留,会随着返回给调用者后,开辟的空间会自动释放。 (2)方法作用域

Python 中的经典类新式类

99封情书 提交于 2020-02-07 23:37:16
Python 中的经典类新式类 要知道经典类和新式类的区别,首先要掌握类的继承 类的继承的一个优点就是减少代码冗余 广度优先和深度优先,这主要是在多类继承的时候会使用到 经典类和新式类的主要区别就是 类的继承的方式 经典类遵循深度优先的规则,新式类遵循广度优先的规则。 至于什么是深度优先什么是广度优先,可以看如下示例: class A: def save(self): print("a") class B(A): def save(self): print("b") class C(A): def save(self): print("c") class D(B, C): def __init__(self): pass d = D() d.save() >> b 在新式类中,D是继承B和C的,按照顺序,首先去找B 如果在B里面能找到实例化对象,便继承B,不再往别的地方寻找, 如果没有,就会接着找C,而不是找B的父亲A! 但是在经典类中,如果B中找不到,它会优先考虑B的父亲A,而不是C。 在 python3 中,都是遵循广度优先的规则 在python2.7以前,应该是遵循深度优先的的规则。两种规则没有优劣之分。 来源: https://www.cnblogs.com/kai-/p/12274235.html

Python基本语法

ε祈祈猫儿з 提交于 2020-02-07 06:49:58
Python中的基本语法与常用方式 1 Python语言基础知识 1.1 输入与输出 1.1.1 数据的输入 1.1.2 数据的输出 1.2 标识符与变量 1.2.1 标识符 1.2.2 变量 1.2.3 赋值语句 1.3 数据类型及运算 1.3.1 数据类型 1.3.2 运算符和表达式 1.3.3 运算表达式 1.4 常见的Python函数 2 控制语句 2.1 分支结构控制语句 2.1.1 if语句 2.2.2 if/else语句 2.2.3 if/else/else语句 2.2.4 选择结构嵌套 2.3 循环结构控制语句 2.3.1 while循环 2.3.2 for语句 2.3.3 循环嵌套 2.3.4 break语句和continue语句 3 常用数据结构 3.1 序列 3.1.1 列表list 3.1.2 元组tuple 3.1.3 字符串 3.1.4 列表与元组之间的转换 3.2 字典 3.2.1 创建字典 3.2.2 字典方法 3.2.3 列表、元组与字典之间的转换 3.3 集合 3.3.1 集合的创建 3.3.2 集合的运算 3.3.3 集合的方法 4 函数的设计 4.1 函数的定义 4.2 函数的调用 4.3 形参与实参 4.4 函数的返回 4.5 位置参数 4.6 默认参数与关键参数 4.7 可变长度参数 4.8 序列作为参数 4.9 基于函数的抽象与求精 4

Python多线程与多进程

 ̄綄美尐妖づ 提交于 2020-02-07 03:00:31
Python多进程 1.用os.fock函数 2.使用multiprocessing模块 方法1只能在linux系统中使用 方法2提供了跨平台的多线程模块 #coding:utf-8 from multiprocessing import Process from time import sleep def func ( num ) : print '进程%d开始' % ( num ) sleep ( num ) print '进程结束' num = 5 for i in range ( 1 , num + 1 ) : p = Process ( target = func , args = ( i , ) ) p . start ( ) #p.join()#添加这句会等待子线程结束之后主线程再结束 还有通过继承的方式实现多进程 #coding:utf-8 from multiprocessing import Process from time import sleep def func ( num ) : print '线程%d开始' % ( num ) sleep ( num ) print '线程%d结束' % ( num ) class MyProcess ( Process ) : def __init__ ( self , num ) : super (

Python 常用魔法方法(下)

試著忘記壹切 提交于 2020-02-07 00:38:14
回顾 魔法方法是 Python 内置方法, 不需要我们手动调用, 它存在的目的是给 解释器 调用的. 比如我们在写 "1 + 1 " 的时候, 这个 "+ " 就会自动调用内置的魔法方法 "__ add__" . 几乎每个魔法方法, 都有一个对应的内置函数或运算符 . 当我们使用这些方法去操作数据时, 解释器会自动调用这些对应的魔法方法. 也可以理解为, 重写内置函数, 如果改变的话. 具体的魔法方法等. 可以去看 内置的 builtins.py 这个接口文档. 内置函数对应魔法方法: 如 next() 对应 __ next __ , 类名() 对应 __ call __ 等这样的映射关系 .... 这一块的上篇呢, 还主要分享 type 类和 object 类来阐明 "万物皆对象". object 类是所有类的 基类. 而 type 类则用来判断某个实例对象所属的 "父类" 是谁, 类似父类,不绝对准确, 用来理解. 比如, 123 是 "int" class; "123" 是 "str" class; "str" 的 type 就是 type; object 的类型也是 type, 但 object 是 type 类的基类. 上篇引出 type 类, 当时用了一些哲学概念上的, "一, 二, 三" 来比喻, 仔细一想, 表述不太对, "元类" 的概念没说 元类

Python之路 - Day1 - Python基础1

佐手、 提交于 2020-02-07 00:37:45
本节内容 Python介绍 发展史 Python 2 or 3? 安装 Hello World程序 变量 用户输入 模块初识 .pyc是什么 数据类型初识 数据运算 表达式if ...else语句 表达式for 循环 break and continue 表达式while 循环 作业需求 一、 Python介绍 Python的创始人为吉多·范·罗苏姆(Guido van Rossum)。1989年的圣诞节期间,吉多·范·罗苏姆为了在阿姆斯特丹打发时间,决心开发一个新的脚本解释程序,作为ABC语言的一种继承。 最新的TIOBE排行榜,Python占据第三,仅次于Java和C。 Python崇尚优美、清晰、简单,是一个优秀并被广泛使用的语言。 由上图可见,Python整体呈上升趋势,反映出Python应用越来越广泛并且也逐渐得到业内的认可!!! Python可以应用于众多领域,如:数据分析、组件集成、网络服务、图像处理、数值计算和科学计算等众多领域。目前业内几乎所有大中型互联网企业都在使用Python,如:Youtube、Dropbox、BT、Quora(美国知乎)、豆瓣、知乎、Google、Yahoo!、Facebook、NASA、百度、腾讯、汽车之家、美团等。 目前Python主要应用领域: 云计算: 云计算最火的语言, 典型应用OpenStack WEB开发:

Python基础—异常和面向对象

こ雲淡風輕ζ 提交于 2020-02-06 00:18:49
期末笔记后期整理,如有问题,请多多指教。 一、异常 1、所有异常类都是Exception的子类 2、常见的异常 ①NameError:访问未声明的变量 ②ZeroDivisionError:除数为0 ③SyntaxError(编译时发生) ④IndexError:序列中不存在的索引 ⑤KeyError:字典中不存在的键访问值时 ⑥FileNotFoundError ⑦AttributeError:尝试访问未知对象属性 3、异常处理 ①捕获简单异常 try: #语句块 except: #异常处理代码(捕获所有异常) 当try里面语句出现错误时,不再继续执行try中语句,直接执行except中处理异常的语句。 ②捕获多个异常 try: #语句块 except 异常名称1: #异常处理代码 except 异常名称2: #异常处理代码 except(异常名1,异常名2): ③捕获异常的描述信息:为了区分不同的错误信息,使用as获取系统反馈的错误信息。 except(ZeroDivisionError,ValueError) as result: print("捕获到异常:%s"%result) except Exception as result: print("捕获到异常:%s"%result) ④没有捕获到异常:如果try语句没有捕获到任何的错误信息,就不再执行except