zoukankan      html  css  js  c++  java
  • 圆 abc模块的练习

    1.

    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方法用来从文件中反序列化出对象

    HOST='127.0.0.1'
    PORT=3306
    DB_PATH=r'E:CMSaaadb'
    '''
    from conf 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
        @staticmethod
        def get_obj_by_id(id):
            file_abspath = r'%s%s%s' % (settings.DB_PATH, os.sep, 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()
    
    conn1=MySQL('127.0.0.1',3306)
    conn1.save() #抛出异常PermissionError: 对象已存在
    
    
    obj=MySQL.get_obj_by_id('7e6c5ec0-7e9f-11e7-9acc-408d5c2f84ca')
    print(obj.host)
    

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

    import math
    class Circle:
        def __init__(self):     # 传入○的半径
            self.__bj = 2    # 隐藏半径属性
    
        # 使用property装饰器当做属性引用
        @property
        def area(self):                 # 计算面积
            return math.pi * self.__bj**2
    
        @property
        def zc(self):
            return 2*math.pi*self.__bj
    
    tea1 = Circle()
    print(tea1.area)       # 求该圆的面积
    
    print(tea1.zc)  # 圆的周长
    

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

    import abc
    class Phone(metaclass=abc.ABCMeta):
    
        @abc.abstractmethod
        def play(self):
            pass
    
        @abc.abstractmethod
        def photo_phone(self):
            pass
    class hongmi(Phone):
        # 子类继承父类的属性,必须遵循父类的规范
        def play(self):
            pass
        def photo_phone(self):
            pass
    
  • 相关阅读:
    STL源码剖析:迭代器
    STL源码剖析:配置器
    [bzoj3940][Usaco2015 Feb]Censoring
    [bzoj2212][Poi2011]Tree Rotations
    [bzoj2733]永无乡&&[bzoj3545]Peaks
    挂个AC自动机
    [bzoj4237]稻草人
    莫比乌斯反演定理证明
    斜率优化dp学习
    备忘
  • 原文地址:https://www.cnblogs.com/WQ577098649/p/11657185.html
Copyright © 2011-2022 走看看