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

Posted dangrui0725

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了二次加工系统的标准类型 包装与授权相关的知识,希望对你有一定的参考价值。

# 二次加工系统的标准类型
# 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__方法

 

以上是关于二次加工系统的标准类型 包装与授权的主要内容,如果未能解决你的问题,请参考以下文章

面向对象进阶2:二次加工标准类型(包装)

定制自己的数据类型(二次加工标准类型(包装))

二次加工标准类型(包装)

补8.python之面相对象part.6(补充授权与继承的概念)

14.继承与授权

面向对象知识点