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

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

时间: 2024-11-09 10:10:08

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

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

---恢复内容开始--- 包装:python为大家提供了标准数据类型,以及丰富的内置方法,其实在很多场景下我们都需要基于标准数据类型来定制我们自己的数据类型,新增/改写方法,这就用到了我们刚学的继承/派生知识(其他的标准类型均可以通过下面的方式进行二次加工) 定制了子类List的append,多了类型检查功能 class List(list):#继承list所有的属性,也可以派生出自己新的,比如append和mid def append(self,p_object): '派生自己的append:

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

class A: def __init__(self, name): self.name = name def __setitem__(self, key, value): self.__dict__[key] = value def __getitem__(self, item): self.__dict__.get('age') def __delitem__(self, key): print('del obj.__dict__[name]我执行') self.__dict__.pop('

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

二次加工标准类型(包装) 包装:python为大家提供了标准数据类型,以及丰富的内置方法,其实在很多场景下我们都需要基于标准数据类型来定制我们自己的数据类型,新增/改写方法,这就用到了我们刚学的继承/派生知识(其他的标准类型均可以通过下面的方式进行二次加工 #基于继承加派生来实现二次加工标准类型 # 派生原有的list类 class List(list): def append(self, p_object): #自定义一个父类中本来就有的append if type(p_object) is

包装和授权

python的包装和授权 包装:python为大家提供了标准数据类型,以及丰富的内置方法,其实在很多场景下我们都需要基于标准数据类型来定制我们自己的数据类型,新增/改写方法,这就用到了我们刚学的继承/派生知识(其他的标准类型均可以通过下面的方式进行二次加工) # 包装(二次加工标准类型) # 继承 + 派生 的方式实现 定制功能 1.重新定义append方法 2.定制新的功能 class List(list): def append(self,object): #append类型必须是字符串 i

重操JS旧业第六弹:基本类型包装

在前面已经知道js中的类型有boolean,string,number,undefined,function,object,其中boolean,number,string为值类型.所谓的基本类型包装,是将基本类型中值类型包装为引用类型与之 相对应的是Boolean,Number,String,其主要作用为值类型增加相应的操作方法,因为值类型本身没有方法,方法是对象类型才具有的. 1包装原理 临时封装,如var str='hello';var str2=str.subString(2):llo;其

使用gSoap规避和修改ONVIF标准类型结构的解析

ONVIF/gSoap依赖关系及问题 ONVIF是一组服务规范,标准参考 gSoap是一套基于实现SOAP通信接口的工具链 即是,当我们需要访问ONVIF的Web Service或实现对ONVIF部分的支持:基于C/C++开发,则需要借助gSoap生成这之间的交互接口调用的代码. gSoap生成代码 wsdl2h 将服务接口描述转换为soapcpp2的转换规则,生成中间头文件. 通常我们前期会选择实现部分服务标准:因此这期间生成的后续多为修改这次生成中间产物.h,而不会一切重新生成. soapc

以写代学:python 数据类型之数字,标准类型函数

标准类型函数 (1)cmp(num1,num2):比较两个数的大小,第一个数大返回正值,反之负值,相等为0,要是比较字符串,比较的是第一个字符,而且是根据字母对应的ascll码决定的 (2)abs(num):返回给定参数的绝对值 (3)divmod(num1,num2):把除法和取余运算结合起来,返回一个包含商和余数的元组 (4)pow(num1,num2):进行指数运算 (5)round(num.0 / num,保留位数):四舍五入,最后一位为保留的位数 (6)仅用于整数的函数 hex():转

亦大自学51cto ——安装Windows系统修改磁盘类型技巧

笔名亦大,整理归纳自学之路有用的方法---------安装Windows系统修改磁盘类型 一般安装Windows 8以上的系统,以前的老电脑安装时都会报错"不能把系统安装在当前磁盘",原因一般是以前的硬盘类型不同,可能是MBR引导,不支持UEFI引导,怎么修改呢?方法很简单如下: 1.shift+F10调出命令提示符 2.输入diskpart命令,在输入list disk查看磁盘目录,再输入select disk 0 (说明:disk 0是我们的硬盘磁盘名),然后输入clean(清楚硬

零基础学python-4.1 python对象的简介和标准类型

对象,面向对象的核心,也是python的核心 python对象有三个特性 1.身份:也就是id,每一个对象都有id,通过id(obj)来读取,一般很少用到这个值,所以不需太管它 2.类型:对象保存什么类型的值,通过type(obj)可以读取,type本身也是对象,他返回的不是字符串,而是对象 我们举一两个例子: 3.值:对象的数据项 当对象创建时,这三个特性都会被赋值,前两个特性是只读的,数据项是可变的 python还有一系列的内建对象,一般来说,对于现在的编程都是够用,如果不够或者需要特殊的数