python-week6
1.如下示例, 请用面向对象的形式优化以下代码
def exc1(host,port,db,charset):conn=connect(host,port,db,charset)conn.execute(sql)return xxxdef exc2(host,port,db,charset,proc_name)conn=connect(host,port,db,charset)conn.call_proc(sql)return xxx
# 每次调用都需要重复传入一堆参数
exc1('127.0.0.1',3306,'db1','utf8','select * from tb1;')
exc2('127.0.0.1',3306,'db1','utf8','存储过程的名字')
import pymysqlclass func_exc(object):def __init__(self, host, port, db, charset=None):self.host = hostself.port = portself.db = dbself.charset = charsetdef exc11(self, sql):conn = pymysql.connect(self.host, self.port, self.db, self.charset)conn.execute(self.sql)return conndef exc22(self, pro_name):conn = pymysql.connect(self.host, self.port, self.db, self.charset)conn.call_proc(pro_name)return connexc1, exc2 = func_exc('127.0.0.1',3306,'db1','utf8')
exc1.exc11('select * from tb1')
exc2.exc22('proc_name')
2.多重继承的执行顺序,请解答以下输出结果是什么?并解释。
class A(object):def __init__(self):print('A')super(A, self).__init__()class B(object):def __init__(self):print('B')super(B, self).__init__()class C(A):def __init__(self):print('C')super(C, self).__init__()class D(A):def __init__(self):print('D')super(D, self).__init__()class E(B, C):def __init__(self):print('E')super(E, self).__init__()class F(C, B, D):def __init__(self):print('F')super(F, self).__init__()class G(D, B):def __init__(self):print('G')super(G, self).__init__() if __name__ == '__main__':g = G()print('-------')f = F()
输出结果为: G D A B ------ F C B D A
# 初始化方法重写 且有super 父类 子类方法都会调用
# 子类不重写 __init__,实例化子类时,会自动调用父类定义的 __init__。
# 如果重写了__init__ 时,实例化子类,就不会调用父类已经定义的 __init__
# 如果重写了__init__ 时,要继承父类的构造方法,可以使用 super 关键字# 多继承问题 继承顺序
# 经典类 : 就是深度优先,公共父类被多次执行。
# 新式类 :广度优先搜索,公共父类只执行一次
eg:
经典类:
class A:def __init__(self):print("Enter A")print("Leave A")class B(A):def __init__(self):print("Enter B")A.__init__(self)print("Leave B")class C(A):def __init__(self):print("Enter C")A.__init__(self)print("Leave C")class D(A):def __init__(self):print("Enter D")A.__init__(self)print("Leave D")class E(B, C, D):def __init__(self):print("Enter E")B.__init__(self)C.__init__(self)D.__init__(self)print("Leave E")E()
# ---执行结果----
# Enter E
# Enter B
# Enter A
# Leave A
# Leave B
# Enter C
# Enter A
# Leave A
# Leave C
# Enter D
# Enter A
# Leave A
# Leave D
# Leave E
新式类:
class A(object):def __init__(self):print("Enter A")print("Leave A")class B(A):def __init__(self):print("Enter B")super(B, self).__init__()print("Leave B")class C(A):def __init__(self):print("Enter C")super(C, self).__init__()print("Leave C")class D(A):def __init__(self):print("Enter D")super(D, self).__init__()print("Leave D")class E(B, C, D):def __init__(self):print("Enter E")super(E, self).__init__()print("Leave E")E()
# ---执行结果----
# Enter E
# Enter B
# Enter C
# Enter D
# Enter A
# Leave A
# Leave D
# Leave C
# Leave B
# Leave E
3、请写一个小游戏,人狗大站,2个角色,人和狗,游戏开始后,生成2个人,3条狗,互相混战,人被狗咬了会掉血,狗被人打了也掉血,狗和人的攻击力,具备的功能都不一样。注意,请按题14领域建模的方式来设计类。
"""
File: 人狗大战3.py
Author: chde_wang
Date: 2020-09-13 12:15:03
Description:
"""
import randomclass Object(object):def __init__(self, name, blood_volume, attack_ability):self.name = nameself.blood_volume = blood_volumeself.attack_ability = attack_abilityclass Person(Object):def attack(self, dog):dog.blood_volume = dog.blood_volume - self.attack_abilityclass Dog(Object):def attack(self, person):person.blood_volume = person.blood_volume - self.attack_abilitydef person_attack_dog(person_list, dog_list):for i in range(len(person_list)):num = random.randint(0, 1)if num == 0:person_list[i].attack(dog_list[0])print(person_list[i].name + "攻击了" + dog_list[0].name,dog_list[0].name + "血量为:" + str(dog_list[0].blood_volume))elif num == 1:person_list[i].attack(dog_list[1])print(person_list[i].name + "攻击了" + dog_list[1].name,dog_list[1].name + "血量为:" + str(dog_list[1].blood_volume))def dog_attack_person(person_list, dog_list):for i in range(len(dog_list)):num = random.randint(0, 2)if num == 0:dog_list[i].attack(person_list[0])print(dog_list[i].name + "攻击了" + person_list[0].name,person_list[0].name + "血量为:" + str(person_list[0].blood_volume))elif num == 1:dog_list[i].attack(person_list[1])print(dog_list[i].name + "攻击了" + person_list[1].name,person_list[1].name + "血量为:" + str(person_list[1].blood_volume))elif num == 2:dog_list[i].attack(person_list[2])print(dog_list[i].name + "攻击了" + person_list[2].name,person_list[2].name + "血量为:" + str(person_list[2].blood_volume))p1 = Person("小明", 100, 5)
p2 = Person("小张", 100, 4)
p3 = Person("小白", 100, 6)
d1 = Dog("旺财", 100, 7)
d2 = Dog("黑宝", 100, 3)person_list = []
person_list.append(p1)
person_list.append(p2)
person_list.append(p3)dog_list = []
dog_list.append(d1)
dog_list.append(d2)person_attack_dog(person_list, dog_list)
print('--------------')
dog_attack_person(person_list, dog_list)#小明攻击了黑宝 黑宝血量为:95
#小张攻击了黑宝 黑宝血量为:91
#小白攻击了黑宝 黑宝血量为:85
#--------------
#旺财攻击了小张 小张血量为:93
#黑宝攻击了小明 小明血量为:97
4、编写程序, 编写一个学生类, 要求有一个计数器的属性, 统计总共实例化了多少个学生.(提示:@classmethod)
class Student(object):count = 0def __init__(self):self.sum()@classmethoddef sum(cls):cls.count += 1Student()
Student()
print(Student.count)
# 2
python-week6相关推荐
- week6 视频分镜
任务 在Windows10系统下,用python,在jupyter notebook,对week5中"将视频每一帧保存成图像"的基础上,通过自定义的均值哈希算法.各通道直方图两种方 ...
- 【Python学习笔记】Coursera课程《Python Data Structures》 密歇根大学 Charles Severance——Week6 Tuple课堂笔记...
Coursera课程<Python Data Structures> 密歇根大学 Charles Severance Week6 Tuple 10 Tuples 10.1 Tuples A ...
- python学习笔记目录
人生苦短,我学python学习笔记目录: week1 python入门week2 python基础week3 python进阶week4 python模块week5 python高阶week6 数据结 ...
- week6 day4 并发编程之多线程 理论
week6 day4 并发编程之多线程 理论 一.什么是线程 二.线程的创建开销小 三.线程和进程的区别 四.为何要用多线程 五.多线程的应用举例 六.经典的线程模型(了解) 七.POSIX线程(了解 ...
- 纽约大学深度学习PyTorch课程笔记(自用)Week6
纽约大学深度学习PyTorch课程笔记Week6 Week 6 6.1 卷积网络的应用 6.1.1 邮政编码识别器 使用CNN进行识别 6.1.2 人脸检测 一个多尺度人脸检测系统 6.1.3 语义分 ...
- python 历遍,Python 历遍目录
使用 os 模块的 walk() 函数可以实现历遍目录的操作,该函数接收一个绝对路径字符串作为必选参数,返回三个参数: 当前目录--指程序当前工作目录--名称(字符串格式) 当前目录--指程序当前所历 ...
- python tkinter 表格_python学习笔记(Tkinter编程利用Treeview实现表格自动更新)
博主今天总结这段时间抽空写的一个GUI编程项目 功能是查看本地打印机队列,可选择指定队列重新打印 直接上图 UI设计包括3个区域左上方,右上方和下方列表区域 使用网格grid方法来分配位置 下面是界面 ...
- python开发之面向对象(一)
python开发之面向对象(一) 一.面向对象基础 1. 基本知识 2. 创建类和对象 二.面向对象三大特性 1. 封装 2. 继承 多继承 3. 多态 三.总结 常见问题 一.面向对象基础 1. 基 ...
- Github配置(git+vscode+python+jupyter)
①下载git 打开 git bash 工具的用户名和密码存储 $ git config --global user.name "Your Name" $ git config -- ...
- 【实验楼】python简明教程
①终端输入python进入 欣赏完自己的杰作后,按 Ctrl + D 输入一个 EOF 字符来退出解释器,你也可以键入 exit() 来退出解释器. ②vim键盘快捷功能分布 ③这里需要注意如果程序中 ...
最新文章
- Android发展Singleton模式
- 删除字符串中多余的空白字符和空行(C语言实现)
- Python爬取淘宝商品价格销量信息
- BCB 多线程的同步与协调
- MATLAB新手教程
- Python基于nginx访问日志并统计IP访问量
- 移动端真机测试怎么做
- 一文读懂「中台」的前世今生
- jQuery框架学习第三天:如何管理jQuery包装集
- [JavaScript] promise中.then()方法
- 吴恩达神经网络和深度学习-学习笔记-12-RMSprop算法
- 支持开源,近期将开设Laszlo专题,陆续介绍相关资讯
- python的requests库入门必看
- 微信html5线上卡券,16.7.1HTML5网页领取卡券
- LeetCode 探索初级算法-数组:10 有效的数独-20200321
- 假期培训第一阶段的总结和第二阶段的总结
- 小米8样张彩色噪点问题分析
- springboot dubbo 既是提供者又是消费者demo源码
- 计算机excel必备知识,2017职称计算机考试EXCEL知识点:创建图表
- 【微信小程序】——Mobx全局数据共享和分包
热门文章
- IoT -- (一) 物联网平台架构设计分析
- java新建对象校验_验证某个对象是否是一个mock对象或者一个spy对象
- 数据结构之线性表:顺序线性表 Java 实现(底层基于数组)
- mysql主从报错_Mysql主从报错锦集
- python 贪吃蛇大作战_python实现简单贪吃蛇游戏
- mac os11以下安装Xcode
- SQL关联查询————LEFT JOIN关键字的使用
- python怎么切换中文键盘_python模拟键盘输入 切换键盘布局过程解析
- python聊天软件实现_python实现点对点聊天程序
- css居中的几种方法_CSS布局中的水平居中的方法