1. 类的属性和对象的属性有什么区别 ?
类的属性是共享给对象的,而对象的属性是自己的.
2. 面向过程编程与面向对象编程的区别于应用场景?
面向过程是流水线式的思维方式,可以把复杂的问题简单化,但是扩展性太差.
面向对象是上帝式的思维方式,程序设计的思路等于是创造一个世界,它的扩展性很强,
但是没有面向过程那样能精准的预测到问题的根本在哪,
应用场景 : 面向过程编程适用于不怎么需要改变的程序,
面向对象编程适用于需要多次改变的程序.
3. 类和对象在内存中是如何保存的 ?
定义类的时候会申请一个名称空间,把类里面的属性都放进去, 生成对象的时候也会申请一个名称空间,把对象的
属性也都放进去,他们是分开的两个名称空间.
4. 什么是绑定到对象的方法, 如何定义,如何调用,给谁用? 有什么特性?
类里面的__init__方法就是绑定对象的方法, 定义一个__init__函数,用对象名来调用,谁调用的方法就给谁用,
特性就是它会自动传参给self参数.
5. 如下示例, 请用面向对象的形式优化一下代码.
def obj1(sql):
db = {'host': '127.0.0.1', 'port': 3306, 'db': 'db1', 'charset': 'utf-8'}
def exc1(db, sql):
conn = connect(db['host'], db['port'], db['db'], db['charset'])
conn.execute(sql)
return xxx
def obj2(sql):
db = {'host': '127.0.0.1', 'port': 3306, 'db': 'db1', 'charset': 'utf-8'}
def exc2(db, proc_name):
conn = connect(db['host'], db['port'], db['db'], db['charset'])
conn.call_proc(sql)
return xxx
6. 下面这段代码的输出结果将是什么 ? 请解释.
1.1.1 1.2.1 323. 第一次会先找对象自己的,没找到,再到类里面.也没有.再到父类里找到了.
第二次会先找对象自己,直接找到了Child1.x = 2. 就不去其他地方找了.
第三次,父类直接改变了,就会直接在对象自己里找,找到了.然后Child1也变成了2.
Child2自己对象里没有,类里也没有,到父类找,父类是3. 就是323.
7.多重继承的执行顺序, 请解答以下输出结果是什么. 并解释
G D A B F C B D A 开始是G先运行,先打印了自己的属性,然后在父类里找,从左到右的找,找到了D,然后
继续找到A. F再运行,跟上面的顺序相同
8. 什么是新式类, 什么是经典类, 二者有什么区别, 什么是深度优先, 什么是广度优先 ?
但凡继承了object类的子类, 以及该子类的子子类. 都称之为新式类
没有继承object类的子类, 以及该子类的子子类, 都称之为经典类.
区别在于有没有继承object类. 在python2和python3中也不同.
深度优先就是从左到右从第一个分支直接挨个查找到所有分支汇聚的那个非object的类,然后再从第二个分支找
广度优先是从左到右的分支里挨个查找,分支查找完再到分支汇聚的类里找,最后到object里找.
9. 老师类
import hashlib
import datetime
import pickle
class Teacher:
def __init__(self,name,age,sex,level,salary):
self.name = name
self.age = age
self.sex = sex
self.level = level
self.salary = salary
def create_id(self):
info = self.name+str(self.age)+self.sex+str(self.level)+str(self.salary)
timeer = str(datetime.datetime.now())
num = hashlib.md5((info+timeer).encode('utf-8'))
self.id = num.hexdigest()
return self.id
def tell_info(self):
print('''
编号:%s
姓名:%s
年龄:%s
性别:%s
等级:%s
薪水:%s'''%(self.id,self.name,self.age,self.sex,self.level,self.salary))
def save(self):
with open(self.id,'wb')as f:
pickle.dump(self,f)
def get_obj_by_id(self):
return pickle.load(open(self.id,'rb'))
stu1 = Teacher('egon',18,'male',10,3000)
print(stu1.create_id())
stu1.tell_info()
stu1.save()
res = stu1.get_obj_by_id()
print(res)
学生类
import hashlib
import datetime
import pickle
class Student:
def __init__(self,name,age,sex):
self.name = name
self.age = age
self.sex = sex
def create_id(self):
info = self.name+str(self.age)+self.sex
timeer = str(datetime.datetime.now())
num = hashlib.md5((info+timeer).encode('utf-8'))
self.id = num.hexdigest()
return self.id
def tell_info(self):
print('''
编号:%s
姓名:%s
年龄:%s
性别:%s'''%(self.id,self.name,self.age,self.sex))
def save(self):
with open(self.id,'wb')as f:
pickle.dump(self,f)
def get_obj_by_id(self):
return pickle.load(open(self.id,'rb'))
stu1 = Student('egon',18,'male')
print(stu1.create_id())
stu1.tell_info()
stu1.save()
res = stu1.get_obj_by_id()
print(res)