wtf

1、定义MySQL类

(参考答案:http://www.cnblogs.com/linhaifeng/articles/7341177.html#_label5)
1.对象有id、host、port三个属性
2.定义工具create_id,在实例化时为每个对象随机生成id,保证id唯一

​ 3.提供两种实例化方式,方式一:用户传入host和port 方式二:从配置文件中读取host和port进行实例化

​ 4.为对象定制方法,save和get_obj_by_id,save能自动将对象序列化到文件中,文件路径为配置文件中DB_PATH,文件名为id号,保存之前验证对象是否已经存在,若存在则抛出异常,;get_obj_by_id方法用来从文件中反序列化出对象

#setting.py 内容
'''
HOST='127.0.0.1'
PORT='333653024'
DB_PATH=r'K:\Python课程\上课视频\db\cof'
'''
import settings
import uuid
import pickle
import os
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('对象已存在')
        file_path=r'%s%s%s' %(settings.DB_PATH,os.sep,self.id)
        pickle.dump(self,open(file_path,'wb'))

    @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=pickle.load(open(file_abspath,'rb'))
            if self.host==obj.host and self.port==obj.port:
                tag=False
                break

        return tag
    
    def get_obj_by_id(self):
        file_abspath=r'%s%s%s'%(settings.DB_PATH,os.sep,self.id)
        return pickle.load(open(file_abspath,'rb'))
    @staticmethod
    def create_id():
        return str(uuid.uuid1())
    @classmethod
    def from_conf(cls):
        print(cls)
        return cls(settings.HOST,settings,PORT)

print(MYSQL.from_conf)  #<bound method MySQL.from_conf of <class '__main__.MySQL'>>
conn=MYSQL.from_conf()
conn.save()
conn.get_obj_by_id() #<class '__main__.MYSQL'>

conn1=MYSQL('127.0.0.1',3306)
conn1.save() #抛出异常PermissionError: 对象已存在

2、定义一个类:圆形,该类有半径,周长,面积等属性,将半径隐藏起来,将周长与面积开放

import math

class Circle:
    def __init__(self,radius):
        self.__radius=radius

    @property
    def area(self):
        return math.pi * self.__radius**2

    @property
    def perimeter(self):
        return 2*math.pi*self.__radius

c=Circle(10)
print(c.area)  #314.1592653589793
print(c.perimeter)  #62.83185307179586

3、使用abc模块定义一个phone抽象类 并编写一个具体的实现类

import abc


class Phone(metaclass=abc.ABCMeta):
    @abc.abstractmethod  #此装饰器强制子类必须执行父类的这套标准
    def boot(self):
        raise  AttributeError('子类必须实现这个方法--开机')

    @abc.abstractmethod
    def voice(self):
        raise AttributeError('子类必须实现这个方法--有声音')

# OPPO
class Oppo(Phone):
    def boot(self):
        print('oppo正在开机')

    def voice(self):
        print('oppo也有声音')

#华为
class Huawei(Phone):
    def boot(self):
        print('HUAWEI正在开机')

    def voice(self):
        print('HUAWEI也有声音')


OPPO= Oppo()
HUAWEI=Huawei()

OPPO.boot()
OPPO.voice()
HUAWEI.boot()
HUAWEI.voice()

运行结果:
oppo正在开机
oppo也有声音
HUAWEI正在开机
HUAWEI也有声音
posted on 2019-10-11 21:31  wtfss  阅读(153)  评论(0)    收藏  举报