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

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/567682.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python定义空数组_在numpy数组中设置空值

如何根据条件使numpy数组中的某些值为空? 我不明白为什么我最终得到的是0,而不是不满足条件的null或空值。。。b是用0和1值填充的numpy数组,c是另一个完全填充的numpy数组。所有阵列均为71x71x166a np.empty(((71,71,166))) d np.empty(((7…

excel学习1-查看一列数值是否在另一列中存在

出现次数用COUNTIF 是否出现使用 IFCOUNTIF 加入$的作用是将需要比对的列固定范围。写好一个函数后,使用右下角号,直接下拉就可以。 参考自https://blog.csdn.net/gywtzh0889/article/details/72910377

fx5u以太网通讯设置_操作示例 | 实现S7300和FX5U的数据交换

北辰BCNet-S7300Plus(以下简称BCNet),在BCNet-S7300的基础上,以太网口增加了支持与西门子带网口PLC(S7-200SMART 、S7-1200、S7-1500、S7300PN)之间的通讯功能。这些通讯功能包括基于S7TCP协议的数据交换、ModbusTCP服务器功能、ModbusTCP客户机功能&…

excel基础-固定某一列的输入内容

Office:需要固定的单元格-点击数据-数据有效性-点击,选择有效性条件 允许为:序列,然后需要下拉框内容,并选择下拉框。即可 切记:开源中的逗号为英文逗号。 最后效果如下: 参考自https://jingya…

为什么多个线程不可能同时抢到一把锁_HFL Redis_12_redis分布式锁的3种实现方式...

HotFrameLearning(简称 HFL) Redis_12_redis分布式锁的3种实现方式-一、大致介绍1、昨天介绍完redis的数据结构后,有小伙伴让本人讲讲redis的分布式锁,因此才有了此篇的由来,只是把我的节奏提前了而已;2、接下来我就通过几种方式介…

linux下mysql5.7修改密码

开始修改MySQL用户密码 ① 输入use mysql回车; ② 输入update user set password password(“147258”)where user’root’; “147258”为你自己设置的密码; 执行第二步后如果报错: 执行后报错  ERROR 1…

react项目中的参数解构_重构复杂的React组件:编写高效且可读组件的5个最佳实践...

随着 React.js 的不断进化,现在的它已经成为 Web 组件中最受欢迎的视图库之一。但是你手中的它,是否真的能够正常工作呢?本文将主要描述 5 个关于React 组件的最佳实践,希望对正在关注 React 组件的你有所帮助。我自己是一名从事了…

robotFramework-ride使用1-关键字驱动与数据类型

RF项目结构 项目文件夹(new project) 用例集(test suit) 测试用例(test case) RF基本功能-设置区介绍 项目 --》settings----》Document:添加用例说明 suit setup:执行此测试套件…

opencv threshold_基于深度学习OpenCV与python进行字符识别

点击上方“小白学视觉”,选择加"星标"或“置顶”重磅干货,第一时间送达当我们在处理图像数据集时,总是会想有没有什么办法以简单的文本格式检索图像中的这些字符呢?今天我们就一起看看有没有什么简单的办法可以实现这一…

python3 robotframework+pycharm框架搭建

1.安装python3 框架组成:自动化基础库(robotframework)图形界面(robotframework-ride) 2.安装RF框架 安装robotframework。pip install robotframework -i https://pypi.doubanio.com/simple 安装robotframework-r…

delphi if多个条件_判断(if)语句

判断(if)语句目标开发中的应用场景if 语句体验if 语句进阶综合应用01. 开发中的应用场景生活中的判断几乎是无所不在的,我们每天都在做各种各样的选择,如果这样?如果那样?……程序中的判断if 今天发工资: ​…

excel sheet限制_Python 处理Excel内的数据(案例介绍*3)

点击上方“蓝字”关注我们了解更多精彩案例一介绍现在有一批电商产品跟当日销量的数据,如下,总共有上万笔的数据,现在需要统计每个品牌当日的销售量,比如美宝莲今天总共卖出了多少的商品,另外需要统计每个品牌下面的每…

robotFramework-ride使用2-分支与循环

1条件运算 Run keyword if 如果条件为True,则执行关键字 ELSE IF ELSE IF使用案例1: 2循环 在使用append to list前,添加Collections库 列表元素添加与删除 列表元素求和-循环 :FOR ${i} IN 1 2 3 4 5 :FOR ${i} IN RANGE 1 5FOR里面…

项目案例:在线拍卖系统_冀拓公司在张家口开展尾矿库在线监测监控系统 建设项目...

近日,受张家口弘锦矿业有限责任公司委托,冀拓公司在弘锦矿业大东沟尾矿库开展了安全风险智能在线监测监控系统施工安装服务。由于该库为“头顶库”,按照省应急管理厅要求“头顶库”必须在6月底之前完成联网,在6月24日接到项目任务…

linux内存管理之RSS和VSZ的区别

[译] linux内存管理之RSS和VSZ的区别 阅读 724 收藏 0 2019-08-25 原文链接: pengrl.com RSS是Resident Set Size(常驻内存大小)的缩写,用于表示进程使用了多少内存(RAM中的物理内存),RSS不…

cad和python哪个好学_对纯外行人来说,学习PS和Python哪个更容易?

果真是高手大隐隐于市,我如此隐藏都被你看出来了,谢邀回答!然后你看出了吧!答案在我这里很明显,当然是学习ps更容易一点,至于Python我的天分实在是太渣,所以,至今我敢不敢承认我学过…

Linux 两台服务器之间传输文件和文件夹

今天处理一个项目要迁移的问题,突然发现这么多图片怎么移过去,可能第一时间想到的是先从这台服务器下载下来,然后再上传到另外一台服务器上面去,这个方法确实是可行,但是实在是太费时间了,今天我就教大家怎…

arm汇编指令集_1. 从0开始学ARM安装Keil MDK uVision集成开发环境

关于ARM的一些基本概念,大家可以参考我之前的文章:《0.到底什么是Cortex、ARMv8、arm架构、ARM指令集、soc?一文帮你梳理基础概念【科普】》0. 如何学习arm?ARM的知识点很多很杂,很多同学都遇到过类似的问题&#xff0…

32位存储环境下整数范围为什么是[-2^31,2^31-1]?

一、概念:存储单位 1.“位”是数据存储的最小单位。在计算机中的二进制数系统中,位,简记为bit,也称为比特,每个0或1就是一个位。 2.“字节”是计算机信息技术用于计量存储容量的一种计量单位,通常情况下,…

mysql5.7配置用户名密码_MySQL57安装图解

原文:MySQL57安装图解_ma524654165的博客-CSDN博客作者: ma524654165MySQL57安装图解、、、0-需要准备的安装包1在百度下载MySQl开始安装下载的MySQL勾选同意点击Next4选择Server only5点击execute继续6点击next7直接next8配置服务器的端口-默认9设置一个…