首页 > 代码库 > python开发面向对象思想--类关联
python开发面向对象思想--类关联
为了关联各个属性。使用了uuid 工号属性。每个对象都有唯一的属性。另外为了保证对象唯一。我给每个对象的属性都做了hash生成了唯一的属性。
hash过程中发现不能hash对象。hash只能hash不可变对象。其次取出对象使用了类静态方法,这样可以一次取出所有的对象,然后用户选择的时候再把uuid存储到对应的关联属性中。
如果要查询uuid对应的对象是谁可以通过uuid去打开对应的文件。然后既可以获取到对应的对象了。遮样所有的对象都可以关联起来了。
#!/usr/bin/env python
#-*- coding:utf-8 -*-
import hashlib
import pickle,os
def create_uuid(info):
m=hashlib.md5()
for value in info:
m.update(value.encode(‘utf-8‘))
return m.hexdigest()
class basecls:
def __init__(self,name):
self.name=name
def uuid(self,info):
return create_uuid(info)
def save(self):
pickle.dump(self,open(os.path.join(self.db_pathdir,self.uuid),‘wb‘))
@classmethod
def get_obj_all_by_uuid(cls):
res_l=[]
for file_name in os.listdir(cls.db_pathdir):
f=open(os.path.join(cls.db_pathdir,file_name),‘rb‘)
res_l.append(pickle.load(f))
f.close()
return res_l
@classmethod
def get_obj_by_uuid(cls,filename):
f=open(os.path.join(cls.db_pathdir,filename),‘rb‘)
res=pickle.load(f)
f.close()
return res
class couser(basecls):
db_pathdir=‘couser‘
def __init__(self,name):
super().__init__(name)
self.uuid = self.uuid([self.name])
class teacher(basecls):
db_pathdir=‘teacher‘
def __init__(self,name,course):
super().__init__(name)
self.course=course
self.uuid = self.uuid([self.name, self.course])
class student:
def __init__(self,name,teacher,course):
super().__init__(name)
self.teacher=teacher
self.course=course
self.uuid=self.uuid([self.name,self.teacher,self.course])
c1=couser(‘python‘)
c2=couser(‘linux‘)
c3=couser(‘go‘)
c1.save()
c2.save()
c3.save()
out=‘‘‘输出课程信息及uuid列表‘‘‘
print(out)
res=[(obj.name,obj.__dict__) for obj in couser.get_obj_all_by_uuid()]
print(res)
t1=teacher(‘alex‘,‘34d1f91fb2e514b8576fab1a75a89a6b‘)
res=[(obj.name,obj.__dict__) for obj in teacher.get_obj_all_by_uuid()]
print(res)
python开发面向对象思想--类关联
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。