zoukankan      html  css  js  c++  java
  • 二次加工系统的标准类型 包装与授权

    # 二次加工系统的标准类型
    # 1、通过继承系统的类来完成包装, 定制自己的数据类型
    
    class List(list):  # 定义了一个List类,继承自系统中的list类
        def append(self, p_object):  # 重写了append方法,改为只能添加字符串
            if type(p_object) is str:
                super().append(p_object)  # 因为重写了append,这里要使用原append方类时需要调用父类的append方法,使用super()调用
            else:
                print('只能添加字符串类型')
    
        def show_middle(self):  # 定义了一个新的方法,用于查找列表中中间的那一个元素
            mid_index = int(len(self) / 2)  # 计算出中间元素的index值
            return self[mid_index]  # 返回中间的元素
    
    
    l1 = List('HelloWorld')  # 使用我们定义的List类创建列表
    l1.append(1111)  # 当append的元素为数字时,不能添加成功,提示只能添加字符串类型
    l1.append('ok')  # 只有append字符串时,才能添加成功
    
    print(l1.show_middle())  # 打印自己定义的show_middle方法返回的结果
    
    # 2、授权:也是一种包装,但不是通过继承来做,而是通过覆盖__getattr__来做
    import time
    
    
    class Open:
        def __init__(self, filename, mode='r', encoding='utf-8'):
            self.file = open(filename, mode, encoding=encoding)  # 获取打开文件的句柄赋值给self.file
            self.mode = mode
            self.encoding = encoding
    
        def write(self, content):  # 我们定义了一个write方法
            t = time.strftime('%Y-%m-%d %X')  # 定义了一个时间显示格式
            self.file.write('%s %s' % (t, content))  # 写入内容时自动加上时间
    
        def __getattr__(self, item):  # 相当于def __getattr__(f1实例对象, 'read'):
            return getattr(self.file, item)  # 通过getattr返回self.file, item的内存地址并return
    
    
    f1 = Open('1.txt', 'r+')
    
    f1.write('111111111
    ')  # 这里调用的是我们自己定义的write方法
    f1.write('222222222
    ')
    f1.write('333333333
    ')
    
    print(f1.read())  # 因为f1的实例及父类Open中没有read属性,所以会执行 __getattr__方法
  • 相关阅读:
    Quartz.net 定式调度任务
    Quartz.net 定时调度CronTrigger时间配置格式说明
    json 数据 添加 删除 排序
    Myeclipse 安装离线adt的方法 ()
    关于C# DataTable 的一些操作
    Android 设置代理(验证用户名和密码)
    js ShowDialogModal 关闭子页面并刷新父页面,保留查询条件
    sql语句中----删除表数据drop、truncate和delete的用法
    SQL数据库增删改查基本语句
    asp.net(C#)利用QRCode生成二维码---.NET菜鸟的成长之路
  • 原文地址:https://www.cnblogs.com/dangrui0725/p/9465464.html
Copyright © 2011-2022 走看看