Python Learning Note Day 14

2018-04-09 0 条评论 141 次阅读 2 人点赞

今天是Python学习第十四天,主要内容是对类(抽象)部分的补充。

补充知识

1. 多态

可对不同类型的对象执行相同的操作,而这些操作就像“被施了魔法”一样能够正常运行。

2. 封装

对外部隐藏有关对象工作原理的细节。

要让方法或属性成为私有的(不能从外部访问),只需让其名称以两个下划线打头即可。

3. 继承

可基于通用类创建出专用类。

可以有多个超类(父类),多重继承,除非万不得已,否则应避免使用多重继承,因为在有些情况下,它可能带来意外的“并发症”。

4. 抽象基类

抽象类是不能(至少是不应该)实例化的类,其职责是定义子类应实现的一组抽象方法。

抽象类(即包含抽象方法的类)最重要的特征是不能实例化。

5. 关于面向对象设计的一些思考

♦ 将相关的东西放在一起。如果一个函数操作一个全局变量,最好将它们作为一个类的属性和方法。

♦ 不要让对象之间过于亲密。方法应只关心其所属实例的属性,对于其他实例的状态,让它们自己去管理就好了。

♦ 慎用继承,尤其是多重继承。继承有时很有用,但在有些情况下可能带来不必要的复杂性。要正确地使用多重继承很难,要排除其中的bug更难。

♦ 保持简单。让方法短小紧凑。一般而言,应确保大多数方法都能在30秒内读完并理解。对于其余的方法,尽可能将其篇幅控制在一页或一屏内。

6. 小结

对象:对象由属性和方法组成。属性不过是属于对象的变量,而方法是存储在属性中的函数。相比于其他函数,(关联的)方法有一个不同之处,那就是它总是将其所属的对象作为第一个参数,而这个参数通常被命名为self。

类:类表示一组(或一类)对象,而每个对象都属于特定的类。类的主要任务是定义其实例将包含的方法。

多态:多态指的是能够同样地对待不同类型和类的对象,即无需知道对象属于哪个类就可调用其方法。

封装:对象可能隐藏(封装)其内部状态。在有些语言中,这意味着对象的状态(属性)只能通过其方法来访问。在Python中,所有的属性都是公有的,但直接访问对象的状态时程序员应谨慎行事,因为这可能在不经意间导致状态不一致。

继承:一个类可以是一个或多个类的子类,在这种情况下,子类将继承超类的所有方法。你可指定多个超类,通过这样做可组合正交(独立且不相关)的功能。为此,一种常见的做法是使用一个核心超类以及一个或多个混合超类。

接口和内省:一般而言,你无需过于深入地研究对象,而只依赖于多态来调用所需的方法。然而,如果要确定对象包含哪些方法或属性,有一些函数可供你用来完成这种工作。

抽象基类:使用模块abc可创建抽象基类。抽象基类用于指定子类必须提供哪些功能,却不实现这些功能。

面向对象设计:关于该如何进行面向对象设计以及是否该采用面向对象设计,有很多不同的观点。无论你持什么样的观点,都必须深入理解问题,进而创建出易于理解的设计。

8. 新函数

函数描述
callable(object)
判断对象是否是可调用的(如是否是函数或方法)
getattr(object,name[,default])
获取属性的值,还可提供默认值
isinstance(object, class)确定对象是否是指定类的实例
hasattr(object, name)
确定对象是否有指定的属性
issubclass(A, B)
确定A是否是B的子类
random.choice(sequence)
从一个非空序列中随机地选择一个元素
setattr(object, name, value)
将对象的指定属性设置为指定的值
type(object)
返回对象的类型

Kiwi

Valar Morghulis

文章评论(0)