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相关推荐

  1. week6 视频分镜

    任务 在Windows10系统下,用python,在jupyter notebook,对week5中"将视频每一帧保存成图像"的基础上,通过自定义的均值哈希算法.各通道直方图两种方 ...

  2. 【Python学习笔记】Coursera课程《Python Data Structures》 密歇根大学 Charles Severance——Week6 Tuple课堂笔记...

    Coursera课程<Python Data Structures> 密歇根大学 Charles Severance Week6 Tuple 10 Tuples 10.1 Tuples A ...

  3. python学习笔记目录

    人生苦短,我学python学习笔记目录: week1 python入门week2 python基础week3 python进阶week4 python模块week5 python高阶week6 数据结 ...

  4. week6 day4 并发编程之多线程 理论

    week6 day4 并发编程之多线程 理论 一.什么是线程 二.线程的创建开销小 三.线程和进程的区别 四.为何要用多线程 五.多线程的应用举例 六.经典的线程模型(了解) 七.POSIX线程(了解 ...

  5. 纽约大学深度学习PyTorch课程笔记(自用)Week6

    纽约大学深度学习PyTorch课程笔记Week6 Week 6 6.1 卷积网络的应用 6.1.1 邮政编码识别器 使用CNN进行识别 6.1.2 人脸检测 一个多尺度人脸检测系统 6.1.3 语义分 ...

  6. python 历遍,Python 历遍目录

    使用 os 模块的 walk() 函数可以实现历遍目录的操作,该函数接收一个绝对路径字符串作为必选参数,返回三个参数: 当前目录--指程序当前工作目录--名称(字符串格式) 当前目录--指程序当前所历 ...

  7. python tkinter 表格_python学习笔记(Tkinter编程利用Treeview实现表格自动更新)

    博主今天总结这段时间抽空写的一个GUI编程项目 功能是查看本地打印机队列,可选择指定队列重新打印 直接上图 UI设计包括3个区域左上方,右上方和下方列表区域 使用网格grid方法来分配位置 下面是界面 ...

  8. python开发之面向对象(一)

    python开发之面向对象(一) 一.面向对象基础 1. 基本知识 2. 创建类和对象 二.面向对象三大特性 1. 封装 2. 继承 多继承 3. 多态 三.总结 常见问题 一.面向对象基础 1. 基 ...

  9. Github配置(git+vscode+python+jupyter)

    ①下载git 打开 git bash 工具的用户名和密码存储 $ git config --global user.name "Your Name" $ git config -- ...

  10. 【实验楼】python简明教程

    ①终端输入python进入 欣赏完自己的杰作后,按 Ctrl + D 输入一个 EOF 字符来退出解释器,你也可以键入 exit() 来退出解释器. ②vim键盘快捷功能分布 ③这里需要注意如果程序中 ...

最新文章

  1. Android发展Singleton模式
  2. 删除字符串中多余的空白字符和空行(C语言实现)
  3. Python爬取淘宝商品价格销量信息
  4. BCB 多线程的同步与协调
  5. MATLAB新手教程
  6. Python基于nginx访问日志并统计IP访问量
  7. 移动端真机测试怎么做
  8. 一文读懂「中台」的前世今生
  9. jQuery框架学习第三天:如何管理jQuery包装集
  10. [JavaScript] promise中.then()方法
  11. 吴恩达神经网络和深度学习-学习笔记-12-RMSprop算法
  12. 支持开源,近期将开设Laszlo专题,陆续介绍相关资讯
  13. python的requests库入门必看
  14. 微信html5线上卡券,16.7.1HTML5网页领取卡券
  15. LeetCode 探索初级算法-数组:10 有效的数独-20200321
  16. 假期培训第一阶段的总结和第二阶段的总结
  17. 小米8样张彩色噪点问题分析
  18. springboot dubbo 既是提供者又是消费者demo源码
  19. 计算机excel必备知识,2017职称计算机考试EXCEL知识点:创建图表
  20. 【微信小程序】——Mobx全局数据共享和分包

热门文章

  1. IoT -- (一) 物联网平台架构设计分析
  2. java新建对象校验_验证某个对象是否是一个mock对象或者一个spy对象
  3. 数据结构之线性表:顺序线性表 Java 实现(底层基于数组)
  4. mysql主从报错_Mysql主从报错锦集
  5. python 贪吃蛇大作战_python实现简单贪吃蛇游戏
  6. mac os11以下安装Xcode
  7. SQL关联查询————LEFT JOIN关键字的使用
  8. python怎么切换中文键盘_python模拟键盘输入 切换键盘布局过程解析
  9. python聊天软件实现_python实现点对点聊天程序
  10. css居中的几种方法_CSS布局中的水平居中的方法