目标、原则和模式
面向对象模式中的主体被称为对象。
每个对象都是类的实例。
类的定义规定了对象包括的实例变量(数据成员)和方法(成员函数)。
面向对象的设计目标
- 健壮性
希望软件能处理在应用中没有明确定义的异常输入。感觉像是身体能抵御病毒。 - 适应性
易于不断进行优化。 - 可重用性
同样的代码可以用在不同系统的各种应用中。
面向对象的设计原则
- 模块化
指的是一种组织原则。 - 抽象化
指的是从一个复杂的系统中提炼出最基础的部分。ADT是数据结构的数学模型,规定了每个操作要做什么而不是怎么做。 - 封装
不同组件不应该现实其各自实现的内部细节。封装提供了健壮性和适应性,因为它允许改变程序一部分的实现细节而不影响其他部分。
面向对象的设计模式
描述了典型软件设计问题的解决方案。
一种可以用于不同情况的解决方案提供了通用的模版。
编码风格建议
类:以首字母大写的单数名词;多个单词连接起来时,遵循“骆驼拼写法”。
函数:小写;多个单词组合起来,应该用下划线分隔。通常是一个描述它作用的动词。如果这个函数的唯一目的是为了返回一个值,其名字可以是描述返回值的名词。
标识某个对象:小写的名词。
常量:大写字母。
抽象基类
定义一组类继承层次结构时,避免重复代码之一的技术时设计一个基类。
如果一个类的唯一目的是作为继承的基类,那么这个类就是一个抽象基类。
抽象基类不能直接实例化。
Python中有专门的抽象基类模块。
import abc
class Sequence(metaclass=abc.ABCMeta): #只能被继承,不能被实例化。
@abstractmethod #该声明表示这个方法是抽象的,不需要提供实现。
def __len__(self):
'''返回长度'''
深拷贝和浅拷贝
warmtones = [color_1,color_2]
palette = warmtones # 取了个别名,没有拷贝。
palette = list(warmtones) # 浅拷贝 可以自由删除元素,但无法随意更改其中的内容,因为存在混叠部分
palette = copy.deepcopy(warmtones) #深拷贝