首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往
您找到你想要的搜索结果了吗?
是的
没有找到

Python抽象魔法--类

鸟类是一个非常通用(抽象)的类,它有多个子类:你看到的那只鸟可能属于子类“云雀”。你可将“鸟类”视为由所有鸟组成的集合,而“云雀”是其一个子集。...比如可以写print(foo.name) 动态语言 Python作为一门动态语言,我们可以根据自己的需要为创建的实例动态地单独绑定我们需要的属性和方法。...但是这样会使得访问和更改都变得比较麻烦,于是python提供了装饰器@property来将有限制的属性或者方法的访问或者修改变得更加便捷。...Vector(2,10) v2 = Vector(5,-2) print (v1 + v2) 方法重写 有的时候我们希望对类的方法进行重写时或许希望可以借助原有类的内容,而不是将父类中的方法进行覆盖,这时python...Hair(88) stu=Student(hair_xiaoming) print(id(stu.hair)) print(id(hair_xiaoming)) stu.ppp() 命名空间和作用域 在python

33310

python抽象基类

与jvm上的语言不一样,python的语言没有interface关键字,而且除了抽象基类,每个类都有相应的接口:类实现或继承的公开属性(方法或数据类型) 在定义里,受保护的属性和私有属性不在接口中:即便...协议的动态本性: python里面有个方法shuffle,可以就地打乱序列,如下: from random import shuffle l = list(range(3)) shuffle(l) l...__setitem__ = setitem shuffle(a) 9 19 10 setitem的参数的名只是约定一样,只不过python会往里面传参数,类的方法本质上也只是一个函数而已。...继承抽象基类很简单,只要实现python里的特殊方法__len__之类的,这样python就会自动识别。 抽象基类的继承大多都是在collections模块,现在打开这个模块的文档看看。...一共有16个基类,分为三层: --顶层是Iterable,Container,Sized,Callable,Hashable: 其中Iterable,Container,Sized是各个集合该继承的三个抽象基类

85610

python设计模式-抽象工厂模式

问题:在上一篇 python设计模式:工厂方法模式我们尝试使用工厂方法创建了披萨店,现在为了保证披萨加盟店也能有良好的声誉,我们需要统一原材料,这个该如何做呢?...[源码参考python-design-patter-abstract-factory.py](https://gist.github.com/gusibi/5e0797f5458678322486f999ca87a180...抽象工厂提供一个用来创建产品家族的抽象类型,这个类型的子类定义了产品被产生的方法。...,就需要改变接口,而改变接口则意味着需要改变每个子类的接口 参考链接 python-design-patter-abstract-factory.py https://gist.github.com/gusibi.../5e0797f5458678322486f999ca87a180 python设计模式:工厂方法模式 ---- 最后,感谢女朋友支持。

30910

Python设计模式(3):抽象工厂模式

导言 为了说明抽象工厂模式引入的背景首先回忆起Python设计模式(2):工厂方法模式类图。从图中可以看到,在工厂方法模式中针对一组产品类构造了另外一组工厂类,并且工厂类与产品类有相同的结构。...第二种解决方案就是将要讲述的抽象工厂模式(Abstract Factory Pattern),包含两个产品类的的抽象工厂模式设计类图如图所示。 ? 抽象工厂模式与工厂方法模式有相似的概念。...抽象工厂模式与工厂模式一样是层次类的结构,但是在这里它不仅仅负责创建一个产品类的对象,而是一族产品类对象。在程序中,它可以是接口或者抽象类。...抽象工厂模式中包含: 一系列互相有关联的产品类,这些产品类有相同的结构。 一系列实的工厂类,实现由抽象工厂类提供的接口。每个实的工厂类生产一组相关的产品类的对象。...当客户对象要从一个相关的产品组中创建一个对象,而没有必要知道到底创建哪个对象时,可以应用抽象工厂模式。如果不使用抽象工厂模式,创建对象的条件语句将会出现在客户程序的许多地方,程序的可维护性差。

1.3K20

Python抽象基类建议收藏

大家好,又见面了,我是全栈君 抽象基类的核心定义在abc模块中,模块中包括了创建抽象基类需要的修饰符和元类型 abc.ABCMeta 用来生成抽象基础类的元类。由它生成的类可以被直接继承。...具体化抽象类的两种方式   具体化抽象类可以有两种方式,一种通过注册(register),另外一种通过继承。...当没有实现抽象方法时,实例化时候不会报错,只有在调用时候才会报错。 继承方法   直接从抽象基类派生子类有一个好处,除非子类实现抽象基类的抽象方法,否则子类不能实例化。...class that provides a standard way to create an ABC using inheritance. """ pass 4.Python...Python提供的常用抽象基类,若要了解各抽象基类的相关信息,请参考具体的文档 发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/120189.html原文链接:https

58820

抽象那些事】缺失抽象

这就是抽象。对于软件工程师来说,抽象能力是最重要的能力之一,也恰恰是最难得的能力之一。 应用抽象原则的实现手法 提供清晰的概念边界和唯一身份 每个抽象都必须有清晰而明确的概念边界,还必须有身份。...如果只提供方法的一部分,抽象既不内聚也不完整。 赋予单一而重要的职责 确保每个抽象都分配单一而重要的职责。 单一:每个抽象都应该只负责一件或一类事情。 重要:抽象不能太鸡肋。...违反抽象原则导致的坏味 我们这篇博客主要讲解分析缺失抽象坏味,对于其它抽象坏味将在后面的博客讲解分析。 缺失抽象 使用一系列数据或编码字符串,而不创建类或接口时,将引发这种坏味。...通常,由于缺失抽象,相关的数据和行为将会分散在其它抽象中,这将会导致两个问题l: 可能会向其它抽象暴露实现细节,违反封装原则 数据和相关的行为分散在不同的抽象中,可能导致实体之间高度耦合,结果是代码脆弱且难以重用...因为在创建抽象前,一定要根据应用抽象具体情况分析,再决定是否要创建抽象

946150

抽象那些事】不完整的抽象&多方面抽象&未用的抽象&重复的抽象

不完整的抽象 抽象未支持所有互补或相关的方法时,将导致这种坏味。 为什么要有完整的抽象? 一种重要的抽象实现手法是创建内聚而完整的抽象抽象未支持相关的方法时,可能会影响抽象的内聚性和完整性。...多方面抽象 抽象被赋予不止一项职责时,将导致这种坏味。 为什么不可以有多方面抽象? 单一职责原则指出,抽象必须承担单一而明确的职责,且必须完全封装该职责。...使用提取类重构多方面抽象 未用的抽象 创建的抽象未用(未被直接使用或继承)时,将导致这种坏味。...有以下两种表现形式: 未引用的抽象:未用的具体类 鳏寡抽象:没有任何派生抽象的接口/抽象类 为什么不可以有未用的抽象? 设计中的抽象未被使用,就没有发挥任何作用,因此违反了抽象原则。...重构建议 对于名称相同的重复抽象,可以将其中一个抽象改为不同的名称。 对于实现相同的重复抽象,如果实现完全相同,可将其中一个抽象删除。

44590

抽象那些事】不完整的抽象&多方面抽象&未用的抽象&重复的抽象

不完整的抽象 抽象未支持所有互补或相关的方法时,将导致这种坏味。 为什么要有完整的抽象? 一种重要的抽象实现手法是创建内聚而完整的抽象抽象未支持相关的方法时,可能会影响抽象的内聚性和完整性。...多方面抽象 抽象被赋予不止一项职责时,将导致这种坏味。 为什么不可以有多方面抽象? 单一职责原则指出,抽象必须承担单一而明确的职责,且必须完全封装该职责。...未用的抽象 创建的抽象未用(未被直接使用或继承)时,将导致这种坏味。有以下两种表现形式: 未引用的抽象:未用的具体类 鳏寡抽象:没有任何派生抽象的接口/抽象类 为什么不可以有未用的抽象?...重复的抽象 两个抽象的名称、实现或两者相同时,将导致这种坏味。 名称相同 两个不同的抽象重名将影响可理解性。...重构建议 对于名称相同的重复抽象,可以将其中一个抽象改为不同的名称。 对于实现相同的重复抽象,如果实现完全相同,可将其中一个抽象删除。

68920

抽象那些事】缺失抽象

这就是抽象。对于软件工程师来说,抽象能力是最重要的能力之一,也恰恰是最难得的能力之一。 应用抽象原则的实现手法 提供清晰的概念边界和唯一身份 每个抽象都必须有清晰而明确的概念边界,还必须有身份。...如果只提供方法的一部分,抽象既不内聚也不完整。 赋予单一而重要的职责 确保每个抽象都分配单一而重要的职责。 单一:每个抽象都应该只负责一件或一类事情。 重要:抽象不能太鸡肋。...违反抽象原则导致的坏味 我们这篇博客主要讲解分析缺失抽象坏味,对于其它抽象坏味将在后面的博客讲解分析。 缺失抽象 使用一系列数据或编码字符串,而不创建类或接口时,将引发这种坏味。...通常,由于缺失抽象,相关的数据和行为将会分散在其它抽象中,这将会导致两个问题l: 可能会向其它抽象暴露实现细节,违反封装原则 数据和相关的行为分散在不同的抽象中,可能导致实体之间高度耦合,结果是代码脆弱且难以重用...因为在创建抽象前,一定要根据应用抽象具体情况分析,再决定是否要创建抽象。 参考:《软件设计重构》

64430

抽象

这是抽象抽象,即如何界定本质?这个方法需要我们在实践中抽象出自己的方法论,才能不被纷繁事物晃花了眼。 抽象层次 抽象层次包含两个概念:1)复杂系统需要分层,每层关注不同的粒度,合而为整体。...2)在某一抽象层次上,抽象出的功能、概念应处于同一抽象层次,而不应混合不同抽象层次的功能、概念。 1) 分层 分层有几个目的:1⃣ 易于复用。 2⃣减少信息量。...2) 同一抽象层次 同一抽象层次在实践中是很重要的。编码时经常看到不同的人将不同抽象层次的代码放到一个接口中,这就将抽象的威力大大降低了。...抽象也是如此,本质上抽象是在经过大量实践之后归纳出来的,可是不同的人有不同的经历,每个人对人生、世界的抽象也是不一样的,因此形成了不同的人生观、世界观。系统也如是,不同人从各自角度出发去认识。...总结 抽象是一个很主观的概念,可以说我们一直以来接触到的世界就是一个抽象过了的世界,从这点来说,抽象有助于提高我们的逻辑能力,因为我们已经知道了我们意识中的世界并不是我们看到的,而是前人从他们的角度抽象出来的

94150

【Kotlin】抽象类 ( 声明 | 抽象类成员 | 抽象类继承 | 抽象方法覆盖 | 抽象方法实现 )

抽象类总结 II . 抽象类声明 III . 抽象类中的 ( 正常 / 抽象 ) 的 ( 成员 / 方法 ) IV . 抽象类继承 V . 抽象方法的覆盖 VI . 抽象方法的实现 I ....抽象类总结 ---- 抽象类总结 : ① 声明 : 抽象类中使用 abstract 声明 ; ② 成员 : 抽象类中既可以定义正常属性和方法 , 又可以定义抽象的属性和方法 ; ③ 继承 : 抽象类可以继承抽象类..., 抽象类也可以继承正常类 , 正常类可以继承抽象类 ; ④ 重写 : 抽象类中可以使用抽象方法重写正常方法 , 也可以进行正常的方法重写 ; ⑤ 特征 : 抽象方法只能定义在抽象类中 , 正常类中不能有抽象方法...抽象类中的 ( 正常 / 抽象 ) 的 ( 成员 / 方法 ) ---- 0 . 抽象类内成员总结 : 抽象类中可以定义正常的成员和方法 , 也可以定义抽象的成员和方法 ; 1 ....("正常类继承抽象类 , 必须实现抽象类中的抽象方法") } } ② 抽象类子类 : 如果抽象类继承抽象类 , 可以不实现父累抽象方法 ; abstract class Father{

1.1K40

Python随笔(四)抽象语法树AST 原

什么是抽象语法树嘞?...在计算机科学中,抽象语法和抽象语法树其实是源代码的抽象语法结构的树状表现形式 我们可以用一个在线的AST编辑器来观察AST的构建 Python语言的执行过程就是通过将Python字节码转化为抽象语法树来进行下一步的分析等其他操作...,所以将Python转化为抽象语法树更利于程序的分析 一般来说,我们早期的学习当中固然会用到一种叫做表达式树的东西,我们用Python来实现一下表达式树 class StackEmptyException...解析(PARSE):将代码字符串解析成抽象语法树。 2. 转换(TRANSFORM):对抽象语法树进行转换操作。 3. 生成(GENERATE): 根据变换后的抽象语法树再生成代码字符串。...的pythonrun里面找到 PyObject *type; 定义了语法树的类型 一般来说,研究抽象语法树有哪些用途呢?

2.6K30

Python抽象基类的定义与使用

我们写Python基本不需要自己创建抽象基类,而是通过鸭子类型来解决大部分问题。《流畅的Python》作者使用了15年Python,但只在项目中创建过一个抽象基类。...定义抽象基类的子类 先回顾下什么是抽象基类:Python抽象基类是指必须让继承它的子类去实现它所要求的抽象方法的类。...虚拟子类并不是抽象基类的真正子类,而是注册到抽象基类上的子类,这样Python就不会做强制检查了。...白鹅类型和鸭子类型是Python的动态特性,它们的共同点是,只要长的像,Python就不会做强制检查,鸭子类型是针对普通类的子类而言的,白鹅类型是针对抽象基类的虚拟子类而言的。...参考资料: 《流畅的Python》第11章 接口:从协议到抽象基类

1.8K30

抽象语法树为什么抽象

从具体到抽象 Abstract Syntax Tree抽象语法树(通常被简写成AST)实际上只是一个解析树(parse tree)的一个精简版本。...AST名字中抽象一词的由来。...精简一棵解析树 我们现在知道具象语法树和抽象语法树的概念,而且知道AST是CST的精简版本,那么AST它是如何生成的呢? 我们现在知道,根据文法规则生成的解析树会非常冗余。...将操作符压进内部节点 继续把冗余的层修剪掉,我们可以得到一颗AST树 一颗抽象语法树 我们已经自己压缩了一棵解析树,通过上面几个步骤的精简,可以总结一些解析树和抽象语法树的不同之处: AST不含有语法细节...有了抽象语法树,我们基于它可以建立清晰的代码描述,非常有利于后续阶段的修改、变换。

1.4K30

抽象类与抽象方法

在我们抽象实例对象的时候,有这样一种情况,往上层抽象时就会发现很难描述对象的属性和行为,比如“形状” ,其方法计算面积怎么计算?...好吧,形状确实是有面积的,但是又无法描述其实现方式,这种包含类我们可以抽象出一个抽象类。 抽象类由于其有可能有无法实现的方法(抽象方法),所以不能被实例化。...抽象类的特征: 1)使用abstract关键字修饰的类称为抽象类 2)抽象类不能实例化对象,原因是抽象方法无法被调用 3)有抽象方法的类肯定是抽象类,但是抽象类中不是必须有抽象方法 如果许多类都有相同的方法...不是具体的动物相信你肯定无法回答,这样我们就需要创建抽象的动物类 public abstract class Animal { }  抽象动物类 1.抽象类不能直接实例化,必须通过子类 abstract...void eat();  抽象吃的方法(行为) 2.抽象方法只需声明,不需要实现 ?

39830

抽象类和抽象方法

java中的抽象类与抽象方法 1、设计理念 2、抽象方法 3、抽象类 3.1 抽象类与普通类的区别 3.2 抽象类案例 1、设计理念   父类要体现所有子类的共同特征,在设计某些方法(行为特征或功能)...另外,只允许在抽象类和接口中声明抽象方法,否则将发生编译错误。 3、抽象类   Java规定如果一个类中包含抽象方法,则该类必须设计为抽象类。...抽象类语法格式如下: [权限修饰符] abstract class 类名{ }   抽象类也是类,所有类的成员在抽象类中都可以声明。   为什么抽象方法所在的类必须声明为抽象类呢?   ...如果不声明为抽象类,则此类就可以实例化,但是得到的对象对抽象方法的调用是无意义的,因为没有任何方法体。 3.1 抽象类与普通类的区别 抽象类不能直接实例化,即不能直接创建抽象类的对象。...子类继承抽象类后,如果子类不再是抽象类,那么子类必须重写抽象类的所有抽象方法,否则编译报错。

46920
领券