1.请用面向对象的形式优化以下代码
class Sql: host= '127.0.0.1' port=3306 db='db1' charset='utf8' sql='select * from tb1;' proc_name='存储过程的名字' def __init__(self,*args): self.args=args def connect(self): pass def exc(self): if self.args == self.sql: conn = self.connect(self.host,self.port,self.db,self.charset) res=conn.execute(self.sql) return res elif self.args == self.proc_name: conn = self.connect(self.host, self.port, self.db, self.charset, self.proc_name) res = conn.call_proc(self.sql) return res ex=Sql('select * from tb1;') print(ex.__dict__)
2.请简单解释Python中 staticmethod(静态方法)和 classmethod(类方法), 并分别补充代码执行下列方法。
非绑定方法:不与类或对象绑定staticmethod
绑定到类的方法:在类内定义的被装饰器@classmethod修饰的方法
class A(object): def foo(self, x): print("executing foo(%s, %s)" % (self,x)) @classmethod def class_foo(cls, x): print("executing class_foo(%s, %s)" % (cls,x)) @staticmethod def static_foo(x): print("executing static_foo(%s)" % (x)) a = A() a.foo("egon") A.class_foo(1) a.static_foo(1)
3.编写程序, 如下有三点要求:
1.自定义用户信息数据结构, 写入文件, 然后读取出内容, 利用json模块进行数据的序列化和反序列化
e.g
{
“egon”:{“password”:“123”,‘status’:False,‘timeout’:0},
“alex”:{“password”:“456”,‘status’:False,‘timeout’:0},
}
2.定义用户类,定义方法db,例如 执行obj.db可以拿到用户数据结构
3.在该类中实现登录、退出方法, 登录成功将状态(status)修改为True,
退出将状态修改为False(退出要判断是否处于登录状态).
密码输入错误三次将设置锁定时间(下次登录如果和当前时间比较大于10秒即不允许登录)
‘’’
import json import time class User: def __init__(self, name, password): self.name = name self.password = password self.status = False self.timeout = 0 @property def db(self): with open(self.name+'.txt', 'r', encoding='utf-8') as f: data = json.load(f) return data def save(self): obj={} obj[self.name]={'password':self.password,'status':self.status,'timeout':self.timeout} with open(self.name+'.txt', 'w', encoding='utf-8') as f: json.dump(obj,f) def login(self): with open(self.name+'.txt', 'r+', encoding='utf-8') as f: data = json.load(f) count = 0 while count < 3: password = input('password>>:').strip() if password != data[self.name]['password']: count += 1 continue else: if data[self.name]['timeout'] != 0: if time.time() - data[self.name]['timeout'] > 10: print('不允许登录了!超时') break else: data[self.name]['status'] = True f.seek(0) f.truncate() json.dump(data, f) print('----welcome----') break else: data[self.name]['status'] = True f.seek(0) f.truncate() json.dump(data, f) print('----welcome----') break else: data[self.name]['timeout']=time.time() f.seek(0) f.truncate() json.dump(data,f) def quit(self): with open(self.name+'.txt', 'r+', encoding='utf-8') as f: data = json.load(f) if data[self.name]['status'] == True: data[self.name]['status'] = False f.seek(0) f.truncate() json.dump(data, f) else: print('您是退出状态!') alex=User('alex','123') egon=User('egon','456') alex.save() egon.save() print(alex.db) print(egon.db)
4.编写程序, A 继承了 B, 俩个类都实现了 handle 方法,
在 A 中的 handle 方法中调用 B 的 handle 方法
class B: def handle(self): print("i am b") class A(B): def handle(self): super().handle() print("i am a") a = A() a.handle()
5.编写程序, 编写一个学生类, 要求有一个计数器的属性, 统计总共实例化了多少个学生
class Student: count = 0 def __init__(self,name,age,sex): self.name = name self.age = age self.sex = sex Student.count += 1 def count_num(self): print("实例化了%s个学生" %Student.count) s1 = Student("a",18,"male") s2 = Student("b",16,"female") s3 = Student("c",15,"male") s1.count_num()
6.使用实例进行 获取、设置、删除 数据, 分别会触发类的什么私有方法
class A(object): def __getitem__(self, item): return self.__dict__.get(item) def __setitem__(self, key, value): self.__dict__[key] = value def __delitem__(self, key): del self.__dict__[key] a = A() #设置属性 a["key"] = "val" print(a.__dict__) b = a["key"] print(b) #删除属性 del a["key"] print(a.__dict__)
7.人狗大站,2个角色,人和狗,
游戏开始后,生成2个人,3条狗,互相混战,人被狗咬了会掉血,狗被人打了也掉血,
狗和人的攻击力,具备的功能都不一样
class Animal:
def init(self,name,blood,attack):
self.name = name
self.blood = blood
self.attack = attack
def attribute(self,enemy):
self.blood -= enemy.attack
class Dog(Animal):
def attribute(self,enemy):
super().attribute(enemy)
print("%s attack %s" %(self.name,enemy.name))
class People(Animal):
def attribute(self,enemy):
super().attribute(enemy)
print("%s attack %s" %(self.name,enemy.name))
d1 = Dog(“二哈”,100,10)
p1 = People(“大壮”,100,20)
d1.attribute(p1)
print(d1.blood)
8.请编写一段符合多态特性的代码
import abc class Animals(metaclass=abc.ABCMeta): @abc.abstractmethod def talk(self): pass class People(Animals): def talk(self): print("say hello") class Dog(Animals): def talk(self): print("say wangwang") class Cat(Animals): def talk(self): print("say miaomiao") people = People() dog = Dog() cat = Cat() def func(animals): animals.talk() func(people) func(dog) func(cat)
9.请执行以下代码,解释错误原因,并修正错误
class Dog(object): def __init__(self,name): self.name = name @property def eat(self): print(" %s is eating" %self.name) d = Dog("ChenRonghua") d.eat
数据库技术:第三模块:面向对象&网络编程基础-第1章 面向对象-练习题(编程题)地址:https://blog.csdn.net/qq_36993243/article/details/110423181
需要了解更多数据库技术:第三模块:面向对象&网络编程基础-第1章 面向对象-练习题(编程题),都可以关注数据库技术分享栏目—计算机技术网(www.ctvol.com)
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请点击右边联系管理员删除。
如若转载,请注明出处:https://www.ctvol.com/dtteaching/631412.html