设计模式:Python实现笔记1

基本语法

Python是一种动态语言,定义变量时不需要在前面加类型说明,而且不同类型之间可以方便地相互转换。Python有五个标准的数据类型:

(1)Numbers(数字) (2)String(字符串)(3)List(列表)(4)Tuple(元组)

(5)Dictionary(字典)

其中 List[]、Tuple()、Dictionary {}为容器。Python 支持四种不同的数字类型:int(有符号整型)、float(浮点型)、complex(复数)(说明:Python 3中已去除long类型,与int类型合并)。

每个变量在使用前都必须赋值,变量赋值以后才会被创建。


类的定义

使用class语句来创建一个新类,class之后为类的名称并以冒号结尾,类的帮助信息可以通过 ClassName._doc_查看,类体(class_suite)由类成员、方法、数据属性组成,举例如下。

其中_init_为初始化函数,相当于构造函数。

1)访问权限

● _foo_:定义的是特殊方法,一般是系统定义名字,类似_init_()。

● _foo:以单下画线开头时表示的是 protected 类型的变量,即保护类型只允许其本身与子类进行访问,不能用于 from module import *。

● __foo:以双下画线开头时,表示的是私有类型(private)的变量,即只允许这个类本身进行访问。

2)类的继承

Python中继承中的一些特点:

(1)在继承中基类的初始化方法_init_()不会被自动调用,它需要在其派生类的构造中亲自专门调用。

(2)在调用基类的方法时,需要使用super()前缀。

(3)Python总是首先查找对应类型的方法,不能在派生类中找到对应的方法时,它才开始到基类中逐个查找(先在本类中查找调用的方法,找不到才去基类中找)。

如果在继承元组中列了一个以上的类,那么它就被称作“多重继承”。

3)基础重载方法

Python的类中有很多内置的基础重载方法,我们可以通过重写这些方法来实现一些特殊的功能。这些方法如表0-1所示。

表0-1 基础重载方法


UML(统一建模语言)

UML是英文 Unified Modeling Language 的缩写,简称UML(统一建模语言),它是一种由一整套图组成的标准化建模语言,用于帮助系统开发人员阐明、设计和构建软件系统。

UML 的这一整套图被分为两组,一组叫结构性图,包含类图、组件图、部署图、对象图、包图、组合结构图、轮廓图;一组叫行为性图,包含用例图、活动图(也叫流程图)、状态机图、序列图、通信图、交互图、时序图。其中类图是应用最广泛的一种图,经常被用于软件架构设计中。

类图用于表示不同的实体(人、事物和数据),以及它们彼此之间的关系。该图描述了系统中对象的类型以及它们之间存在的各种静态关系,是一切面向对象方法的核心建模工具。

UML 类图中最常见的几种关系有:泛化(Generalization)、实现(Realization)、组合(Composition)、聚合(Aggregation)、关联(Association)和依赖(Dependency)。这些关系的强弱顺序为:泛化=实现 > 组合 > 聚合 > 关联 > 依赖。

1.泛化

泛化(Generalization)是一种继承关系,表示一般与特殊的关系,它指定了子类如何特化父类的所有特征和行为。

如:哺乳动物具有恒温、胎生、哺乳等生理特征,猫和牛都是哺乳动物,也都具有这些特征,但除此之外,猫会捉老鼠,牛会耕地,如图0-1所示。


2.实现

实现(Realization)是一种类与接口的关系,表示类是接口所有特征和行为的实现。

如:蝙蝠也是哺乳动物,它除具有哺乳动物的一般特征之外,还会飞,我们可以定义一个IFlyable的接口,表示飞行的动作,而蝙蝠需要实现这个接口,如图0-2所示。

图0-2 实现



3.组合

组合(Composition)也表示整体与部分的关系,但部分离开整体后无法单独存在。因此,组合与聚合相比是一种更强的关系。

如:我们的电脑由CPU、主板、硬盘、内存组成,电脑与CPU、主板、硬盘、内存是整体与部分的关系,但如果让CPU、主板等组件单独存在,就无法工作,因此没有意义,如图0-3所示。


4.聚合

聚合(Aggregation)是整体与部分的关系,部分可以离开整体而单独存在。

如:一个公司会有多个员工,但员工可以离开公司单独存在,离职了依然可以好好地活着,如图0-4所示。


5.关联

关联(Association)是一种拥有关系,它使一个类知道另一个类的属性和方法。关联可以是双向的,也可以是单向的。

如:一本书会有多个读者,一个读者也可能会有多本书,书和读者是一种双向的关系(也就是多对多的关系);但一本书通常只会有一个作者,是一种单向的关系(就是一对一的关系,也可能是一对多的关系,因为一个作者可能会写多本书),如图0-5所示。


6.依赖

依赖(Dependency)是一种使用的关系,即一个类的实现需要另一个类的协助,所以尽量不要使用双向的互相依赖。

如:所有的动物都要吃东西才能活着,动物与食物就是一种依赖关系,动物依赖食物而生存,如图0-6所示。




Python的对象模型

对象是内存中的一个单元,包括数值和相关操作的集合。

对象是Python语言中最基本的概念,在Python中处理的每样东西都是对象。Python中还有一些基本概念,它们的关系如下:

(1)程序由模块构成;

(2)模块包含语句;

(3)语句包含表达式;

(4)表达式建立并处理对象。

Python中有许多内置对象可供编程者使用。有些内置对象可直接使用,如数字、字符串、列表、del等,如表1-1所示;有些内置对象需要导入模块才能使用,如正弦函数sin(x)、随机数产生函数random( )等。



python中的常用内置函数如表

常用操作符如表,在用表达式进行运算时,要善于用小括号指定运算的顺序。

单独的对象也称为表达式,如True 、x等。


python中的常用内置函数如下表


模块的导入

导入1个模块之后,就能使用模块中的函数和类。导入模块使用import语句,有3种用法。

1.导入整个模块

一般格式为:

import 模块名1[, 模块名2[,...]]

模块名就是程序文件的前缀,不含“.py”,可一次导入多个模块。导入模块之后,调用模块中的函数或类时,需要以模块名为前缀,程序的可读性好。如:

>>> import math

>>> math.sin(0.5)

0.479425538604203

2.与from联用导入整个模块

一般格式为:

from 模块名 import*

这种方式导入模块之后,调用模块中的函数或类时,仅使用函数名或类名,简洁但程序的可读性稍差。如:

>>> from math import *

>>> cos(0.5)

0.8775825618903728

3.与from联用导入1个或多个对象

一般格式为:

from 模块名 import 对象名1[, 对象名2[,...]]

这种方式只导入模块中的1个或多个对象,调用模块中的对象时,仅使用对象名。如:

>>> from math import exp , sin, cos

>>> exp(1)

2.718281828459045

>>> sin(0.5)

0.479425538604203

>>> cos(0.5)

0.8775825618903728

Python中的常用模块如下表


相关文章

Python-1

在Jupyter 中显示txt文件的内容:linux ---> !cat tmp.txtwindowx ---> !more tmp.txt安装 Anacondaconda --->...

苹果M1电脑真实编程测试之python篇-60个项目最全测试

苹果M1 mac电脑发售有一段时间,已经有多个性能测试软件对M1进行了测试,苹果M1跑分不俗。在geekbench上M1 Mac电脑甚至已经登顶Mac单核性能榜首。那么在真实的编程环境中,M1 mac...

Python写每天进步1%的力量

离别了学生时代,步入了职场,你还记得你离上一次打开书本是在什么时候吗?认真上课,看学习视频,静下心来,虽唾手可得,却似乎离我们越来越远。每天忙着忙着,不知道自己忙什么,只是连坐下来停下思考5分钟的时间...

Python教程:第1篇 Python语言零基础从入门到高阶教程综述

目录前言本教程适合您吗?版权声明教程预告前言您好!欢迎您阅读本系列教程的第一篇文章。本教程是笔者准备写的系统化的、深入浅出的Python零基础从入门到高阶教程。零基础是指您可以没有任何编程经验,高阶是...

Python入门,一定要吃透这69个内置函数

内置函数就是Python预先定义的函数,这些内置函数使用方便,无需导入,直接调用,大大提高使用者的工作效率,也更便于程序的阅读。截止到Python版本3.9.1,Python一共提供了69个内置函数。...

使用 Python 编写 SolidWorks 脚本 01

大家好,欢迎来到我的频道。在本系列视频中,我将讨论使用Python编写Solidworks脚本。在开始之前,我将使用Solidworks2.21。对于Python IDE,我将使用Visual Stu...