首页 > 其他 > 详细

二次加工系统的标准类型 包装与授权

时间:2018-08-13 00:01:45      阅读:215      评论:0      收藏:0      [点我收藏+]
# 二次加工系统的标准类型
# 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\n)  # 这里调用的是我们自己定义的write方法
f1.write(222222222\n)
f1.write(333333333\n)

print(f1.read())  # 因为f1的实例及父类Open中没有read属性,所以会执行 __getattr__方法

 

二次加工系统的标准类型 包装与授权

原文:https://www.cnblogs.com/dangrui0725/p/9465464.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!