python——第7章 再谈抽象

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

7.2.5 类的命名空间

在class语句中定义的代码都是在一个特殊的命名空间内执行的,类的所有成员都可访问这个命名空间。类定义其实就是要执行的代码段。
在类定义中,并非只能包含def语句。

7.2.6 指定超类

7.2.7 深入探讨继承

  • 如果你有一个类,并想知道它的基类,可访问其特殊属性__bases__。

7.2.8 多个超类

多重继承 是一个功能强大的工具。然而,除非万不得已,否则应避免使用多重继承,因为在有些情况下,它可能带来意外的“并发症”。
使用多重继承时,有一点务必注意:如果多个超类以不同的方式实现了同一个方法(即有多个同名方法),必须在class语句中小心排列这些超类,因为位于前面的类的方法将覆盖位于后面的类的方法。因此,在前面的示例中,如果Calculator类包含方法talk,那么这个方法将覆盖Talker
类的方法talk(导致它不可访问)。如果像下面这样反转超类的排列顺序:
class TalkingCalculator(Talker, Calculator): pass
将导致Talker的方法talk是可以访问的。多个超类的超类相同时,查找特定方法或属性时访问超类的顺序称为方法解析顺序(MRO),它使用的算法非常复杂。所幸其效果很好,你可能根本无需担心。

7.2.9 接口和内省

瑶池和狂野

7.2.10 抽象基类

7.4.1 本章介绍的新函数

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

猜你喜欢

转载自blog.csdn.net/acktomas/article/details/84767851