面向对象设计与面向对象编程的关系面向对象设计OOD不会特别要求面向对象编程语言。事实上OOD 可以由纯结构化语言来实现比如 C但如果想要构造具备对象性质和特点的数据类型就需要在程序上作更多的努力。当一门语言内建 OO 特性OO 编程开发就会更加方便高效。另一方面一门面向对象的语言不一定会强制你写 OO 方面的程序。例如 C可以被认为“更好的C”而 Java则要求万物皆类此外还规定一个源文件对应一个类定义。然而在 Python 中类和 OOP 都不是日常编程所必需的。尽管它从一开始设计就是面向对象的并且结构上支持 OOP但Python 没有限定或要求你在你的应用中写 OO 的代码。OOP 是一门强大的工具不管你是准备进入学习过渡或是转向 OOP都可以任意支配。考虑用 OOD 来工作的一个最重要的原因在于它直接提供建模和解决现实世界问题和情形的途径。类类是一种数据结构我们可以用它来定义对象后者把数据值和行为特性融合在一起。类是现实世界的抽象的实体以编程形式出现。实例是这些对象的具体化。可以类比一下类是蓝图或者模型用来产生真实的物体实例。类还可以派生出相似但有差异的子类。编程中类的概念就应用了很多这样的特征。在 Python 中类声明与函数声明很相似头一行用一个相应的关键字接下来是一个作为它的定义的代码体如下所示复制代码代码如下:def functionName(args):function documentation string #函数文档字符串function_suite #函数体class ClassName(object):class documentation string #类文档字符串class_suite #类体二者都允许你在他们的声明中创建函数闭包或者内部函数即函数内的函数还有在类中定义的方法。最大的不同在于你运行函数而类会创建一个对象。类就像一个 Python 容器类型。尽管类是对象在 Python 中一切皆对象但正被定义时它们还不是对象的实现。创建类Python 类使用 class 关键字来创建。简单的类的声明可以是关键字后紧跟类名复制代码代码如下:class ClassName(bases):class documentation string #类文档字符串class_suite #类体基类是一个或多个用于继承的父类的集合类体由所有声明语句类成员定义数据属性和函数组成。类通常在一个模块的顶层进行定义以便类实例能够在类所定义的源代码文件中的任何地方被创建。声明与定义对于 Python 函数来说声明与定义类没什么区别因为他们是同时进行的定义类体紧跟在声明含 class 关键字的头行[header line])和可选的文档字符串后面。同时所有的方法也必须同时被定义。如果对 OOP 很熟悉请注意 Python 并不支持纯虚函数像 C或者抽象方法如在 JAVA 中这些都强制程序员在子类中定义方法。作为替代方法你可以简单地在基类方法中引发 NotImplementedError 异常这样可以获得类似的效果。类属性属性就是属于另一个对象的数据或者函数元素,可以通过我们熟悉的句点属性标识法来访问。一些 Python 类型比如复数有数据属性实部和虚部而另外一些像列表和字典拥有方法函数属性。有关属性的一个有趣的地方是当你正访问一个属性时它同时也是一个对象拥有它自己的属性可以访问这导致了一个属性链比如myThing,subThing,subSubThing.等等类的数据属性数据属性仅仅是所定义的类的变量。它们可以像任何其它变量一样在类创建后被使用并且要么是由类中的方法来更新要么是在主程序其它什么地方被更新。这种属性已为 OO 程序员所熟悉即静态变量或者是静态数据。它们表示这些数据是与它们所属的类对象绑定的不依赖于任何类实例。如果你是一位 Java 或 C程序员这种类型的数据相当于在一个变量声明前加上 static 关键字。静态成员通常仅用来跟踪与类相关的值。