json ,pickle

import settings
import uuid
import json
import os
import json as default_json
from json.encoder import JSONEncoder

class MyJsonEncoder(JSONEncoder):
    def default(self, o):
        if isinstance(o,MySQL):
            return o.__dict__
        return JSONEncoder.default(self,o)
class MyJson(object):
    @staticmethod
    def dump(obj, fp):
        return default_json.dump(obj, fp,cls=MyJsonEncoder)      #自定义Json,使json 可以处理MySQL类的对象

class MySQL:
    def __init__(self,host,port):
        self.id=self.create_id()
        self.host=host
        self.port=port
    def save(self):
        if not self.is_exists:
            raise PermissionError("yi cui zai ")
        file_path=r'%s%s%s'%(settings.DB_PATH,os.sep,self.id)
        # pickle.dump(self,open(file_path,'wb'))
        # from lib.MYJSON import MyJson          出错
Python中可能会遇到 cannot import name ‘XXX’ 错误,
其实这有可能出现再模块导入的顺序问题上,
比如:在A文件头执行到语句 from B import XXX ,
程序马上就会转到B文件中去,从头到尾顺序寻找B文件中的XXX函数,
而A文件就暂停执行,直到把XXX函数复制到内存中,
但B文件中的文件头可能也有导入,
如果B文件头中又导入了A文件中的函数,
由于XXX函数还没有被复制。
所以于A文件因为暂停执行而无法导入,就会出现上面的错误了。

MyJson.dump(self, open(file_path, 'w')) #self 就是一个MYSQL 的对相 @property def is_exists(self): tag=True files=os.listdir(settings.DB_PATH) for file in files: file_abspath=r'%s%s%s'%(settings.DB_PATH,os.sep,file) obj=json.load(open(file_abspath,'r')) # try: # obj=pickle.load(open(file_abspath,'rb')) # except EOFError: # return False if obj['host'] == self.host and obj['port'] == self.port: tag=False break return tag @staticmethod def get_obj_by_id(id): file_path=r'%s%s%s'%(settings.DB_PATH,os.sep,id) return json.load(open(file_path,'r')) # return pickle.load(open(file_path,'rb')) @staticmethod def create_id(): return str(uuid.uuid1()) @classmethod def from_conf(cls): return cls(settings.HOST,settings.PORT) # print(MySQL.from_conf()) # conn=MySQL.from_conf() # print(type(conn)) # conn.save() # res=conn.get_obj_by_id('ea6ebaf0-e68e-11e8-89fa-98541bbe06e4') # print(res.host,res.port) obj=MySQL('127.0.0.1','8090') # print(obj,type(obj)) obj.save()
原文地址:https://www.cnblogs.com/wuxi9864/p/9951196.html