python实现组合问题_python3 最基本且简单的实现组合设计模式
组合模式是把一个类别归为一个整体,并且组织多个整体之间的关系,使用通过树形结构来描述所有整体。
一般的编写方式为一个类别对象下添加多个该对象的元素,该对象又为其它对象下的元素。简单来说就是一个学校有一个总部,总部下有有师资部、招生部;总部有分校,分校也有。
在我个人看来,设计模式的使用并不局限于书本描述的具体问题的解决,是需要丰富的业务经验才能更好的灵活应用,本人能力有限,在此也是给出一个简单的示例用来说明,额外的灵活运营需要看个人的编写方式。
首先新建一个学校的基类:
#根
class root:
name = ''
def __init__(self, name):
self.name = name
def add(self, root):
pass
以上学校基类初始化方法为接收一个name,并且有一个抽象方法add。
有了一个学校基类后,具体新建一个学校类,继承root基类:
#学校类
class School(root):
childrenroot = []
def add(self, root):
self.childrenroot.append(root)
在以上学校类中,继承了root基类,并且实现了add方法,接收root值,并且把它添加到 childrenroot 列表中,这样可以网当前对象下添加子节点,或者说添加下级对象。
新建一个招生办类以及一个师资部类:
#招生办
class StudentAdmissionDept(root):
def __init__(self, name):
self.name = name
#师资部
class FacultyDepartment(root):
def __init__(self, name):
self.name = name
以上内容很简单,都是继承于root,就一个初始化方法。
开始实现调用。首先新建一个学校总部对象,并且往这个总部对象下添加一个招生办对象以及一个师资部对象:
root = School('总部')
root.add(StudentAdmissionDept('总部招生办'))
root.add(FacultyDepartment('总部师资部'))
新建好总部对象后,往下添加分校区的对象。分校区的部门设置跟总校一致:
s1 = School('桂林校区')
s1.add(StudentAdmissionDept('桂林校区 招生办'))
s1.add(FacultyDepartment('桂林校区 师资部'))
root.add(s1)
在配置完第一个桂林校区后,使用root总部的add方法,添加当前桂林校区为下级。
再新建几个校区:
s2 = School('深圳校区')
s2.add(StudentAdmissionDept('深圳校区 招生办'))
s2.add(FacultyDepartment('深圳校区 师资部'))
root.add(s2)
s3 = School('广州校区')
s3.add(StudentAdmissionDept('广州校区 招生办'))
s3.add(FacultyDepartment('广州校区 师资部'))
root.add(s3)
以上配置方法跟第一个校区配置为root总部校区下级一致。
最后使用遍历打印出各个校区的名字:
print('\n',root.name,'下级学校层级:\n')
for i in root.childrenroot:
print(i.name)
结果为:
由于没有排版,以上结果并没有很好的直观显示层级,剩下的只需要自己排版输出即可。
在当前文章对应的代码编写中,最后的新建校区及配置信息,可以新建一个类,封装好该调用、输出方法,可以很方便的使用组合设计模式。
完整代码如下:
#根
class root:
name = ''
def __init__(self, name):
self.name = name
def add(self, root):
pass
#学校类
class School(root):
childrenroot = []
def add(self, root):
self.childrenroot.append(root)
#招生办
class StudentAdmissionDept(root):
def __init__(self, name):
self.name = name
#师资部
class FacultyDepartment(root):
def __init__(self, name):
self.name = name
root = School('总部')
root.add(StudentAdmissionDept('总部招生办'))
root.add(FacultyDepartment('总部师资部'))
s1 = School('桂林校区')
s1.add(StudentAdmissionDept('桂林校区 招生办'))
s1.add(FacultyDepartment('桂林校区 师资部'))
root.add(s1)
s2 = School('深圳校区')
s2.add(StudentAdmissionDept('深圳校区 招生办'))
s2.add(FacultyDepartment('深圳校区 师资部'))
root.add(s2)
s3 = School('广州校区')
s3.add(StudentAdmissionDept('广州校区 招生办'))
s3.add(FacultyDepartment('广州校区 师资部'))
root.add(s3)
print('\n',root.name,'下级学校层级:\n')
for i in root.childrenroot:
print(i.name)
python实现组合问题_python3 最基本且简单的实现组合设计模式相关推荐
- python怎么建立画板_Python3使用PyQt5制作简单的画板/手写板实例
1.前言 版本:Python3.6.1 + PyQt5 写一个程序的时候需要用到画板/手写板,只需要最简单的那种.原以为网上到处都是,结果找了好几天,都没有找到想要的结果. 网上的要么是非python ...
- python元组元素删除_Python3基础 通过拆分元素 把元组的数据删除
镇场诗: 诚听如来语,顿舍世间名与利.愿做地藏徒,广演是经阎浮提. 愿尽吾所学,成就一良心博客.愿诸后来人,重现智慧清净体. ------------------------------------- ...
- python 工资管理软件_Python3实现的简单工资管理系统示例
本文实例讲述了Python3实现的简单工资管理系统.分享给大家供大家参考,具体如下: 工资管理系统要求: 1. 查询员工工资 2. 修改员工工资 3. 增加新员工记录 4. 退出 执行代码: #!/u ...
- python基础知识及数据分析工具安装及简单使用(Numpy/Scipy/Matplotlib/Pandas/StatsModels/Scikit-Learn/Keras/Gensim))
Python介绍. Unix & Linux & Window & Mac 平台安装更新 Python3 及VSCode下Python环境配置配置 python基础知识及数据分 ...
- 学简单python好学吗_python好学吗? 语法简单吗? 举个例子?
2009-07-13 回答 pythonPython (发音:[ 'paiθ(ə)n; (US) 'paiθɔn ]n.蟒蛇,巨蛇 ),是一种面向对象的解释性的计算机程序设计语言,也是一种功能强大而完 ...
- Python 暴力破解zip文件密码(相对简单的密码)
Python 暴力破解zip文件密码(相对简单的密码) 密码的使用范围很广,首先,我们要明确密码的作用,其次要明白密码的类型. 密码的作用是进行权限的限制,判断用户的合法性,(不 ...
- 基于Python Tkiner、thread与socket实现的简单多人聊天室,在Python中创建TCP服务器与客户端进行通信
基于Python Tkiner.thread与socket实现的简单多人聊天室,在Python中创建TCP服务器与客户端进行通信 完整代码下载地址:基于Python Tkiner.thread与soc ...
- python小项目实例流程-Python小项目:快速开发出一个简单的学生管理系统
原标题:Python小项目:快速开发出一个简单的学生管理系统 本文根据实际项目中的一部分api 设计抽象出来,实例化成一个简单小例子,暂且叫作「学生管理系统」. 这个系统主要完成下面增删改查的功能: ...
- python小项目案例-Python小项目:快速开发出一个简单的学生管理系统
本文根据实际项目中的一部分api 设计抽象出来,实例化成一个简单小例子,暂且叫作「学生管理系统」. 这个系统主要完成下面增删改查的功能: 包括: 学校信息的管理 教师信息的管理 学生信息的管理 根据A ...
最新文章
- 数据结构之C语言模拟整数数组实现
- android 代码混淆示例
- UA MATH523A 实分析3 积分理论15 乘积测度
- Oralce的图形化界面----plsql developer涉及到的知识点总结
- 学习java 的30个目标
- python oracle 运维,mysql oracle python连接
- jsp访问java方法_JSP基础知识之访问JavaBean的方法
- SAP CRM WebClient UI recent object的后台存储实现
- 童家旺:如何用分表存储来提高性能
- 字符串的连接(复习)
- Binaural Microphone
- CentOS6.5恢复误删除的文件
- mongodb linux用户验证登陆,转载:linux下mongodb的用户查询_【Linux】MongoDB创建数据库(开启用户认证)...
- 大厂面试必问!疯狂Java讲义第五版pdf在线阅读
- 18-2mapreduce的案例加强——好程序
- Python语言为何如此流行?
- Android 自定义字体
- 计算机应用基础——计算机硬件(三)
- VLDB 2022最佳研究论文:克服通信挑战,新框架SANCUS实现GNN高效训练
- Cycle3-Group1