八、对象和类

创建自定义对象

1、对象魔法

    对象:一系列数据(属性)以及一套访问和操作这些数据的方法。

    多态:可对不同类型的对象执行相同的操作

    封装:对外部隐藏有关对象工作原理的细节

    继承:可基于通用类创建出专用类

  1.1 多态与方法

    即便你不知道变量指向的是哪种对象,也能够对其执行操作,且操作的行为将随对象所属的类型(类)而异。    

    与对象属性相关联的函数称为方法。

  1.2 封装与属性

    属性是归属于对象的变量

    属性描述对象的状态

    属性能被对象的方法修改

    总结:对象将一系列函数(方法)组合起来,并赋予它们访问一些变量(属性)的权限,而属性可用于在两次函数调用之间存储值。

  1.3 继承

    子类具有父类的所有属性和方法,且其或有易于父类的属性和方法

2、类

  2.1 类是什么

    类——一种对象。

    每个对象都属于特定的类,并被称为该类的实例

    类由其支持的方法定义。

    子类(subclass)

    超类(superclass)

  2.2 创建自定义类

    

    

  2.3 属性、函数和方法

    方法(关联的方法)将其第一个参数(self)关联到它所属的实例,因此无需提供这个参数。

  2.4 隐藏

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

    私有属性不能从对象外部访问,而只能通过存取器方法(如get_name和set_name)来访问。

    注意

      在类定义中,对所有以两个下划线打头的名称都进行转换,即在开头加一个下划线和类名,就能从类外访问私有方法。

      

     

    如果你不希望名称被修改,又想发出不要从外部修改属性或访问方法的信号,可用一个下划线打头,这是一个约定。

  2.5 类的命名空间

    在class语句中定义的代码都是在一个特殊的命名空间(类的命名空间)内执行,而类的所有成员都可访问这个命名空间。

    

    

  2.6 指定超类

    要指定超类,可在class语句中的类名加上超类名,并将其用圆括号括起。

  2.7 深入讨论继承

    要讨论一个类是否是另一个类的子类,可使用内置方法issubclass

    

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

      

    要确定对象是否是特定类的实例,可使用isinstance

    

     如果你想要获悉对象属于哪个类,可使用属性__class__

    

    type(s)也可以获悉其所属的类

    

  2.8 多个超类

    多重继承。

    

    多个超类的超类相同时,查找特定方法或属性时访问超类的顺序称为方法解析顺序(MRO)。  

    一种常见的做法是使用一个核心超类以及一个或多个混合超类。

  2.9 接口和内省

     对象遵循特定的接口(即实现特定的方法)    

     

  2.10 抽象基类

    Python通过引入模块abc为所谓的抽象基类提供支持。

    

3、面向对象设计 

  要确定需要哪些类以及这些类应包含哪些方法时,可以这样做:

    1、将有关问题的描述(程序需要做什么)记录下来,并给所有的名称、动词和形容词加上标记

    2、在名词中找出可能的类

    3、在动词中找出可能的方法

    4、在形容词中找出可能的属性

    5、将找出的方法和属性分配给各个类

  改进模型

    1、记录(或设想)一系列用例。

    2、透彻而仔细地考虑每个场景,确保模型包含了所需的一切。 

猜你喜欢

转载自www.cnblogs.com/nuochengze/p/12441966.html