# 实现授权是包装的一个特性。包装一个类型通常是对已存在的类型进行一些自定义定制,
# 这种做法可以新建,修改,或删除原有产品的某些功能,而其他的保持不变。
# 授权的过程,其实也就是所有的更新功能都交给新类的自定义的某部分功能来处理,但已存在的功能就授权给对象的默认属性。 class List(list): def append(self, object):#append添加的列表必须是字符串类型
print(object)
if type(object) is str:
#包装标准类型实现功能
# list.append(self,object)
super().append(object)
else:
print("只能添加字符串") def show_midle(self):
midel_index=int(len(self)/2)
return self[midel_index] # l2=list("hello world")
# print(l2,type(l2)) ll=List("helloworld") print(ll,type(ll)) print(ll.show_midle()) ll.append("") print(ll)
#授权:授权是包装的一个特性,包装一个类型通常是对已存在的类型的一些定制
#这种方法,可以新建,修改或删除原有产品的功能,其他的则保持原样,授权的过程,及是所有更新的功能都是由新类
#的某部分来处理,但已存在的功能就授权给对象的默认属性 #实现授权的关键点是覆盖__getattr__方法
import time
class Filehandle():
def __init__(self,filename,mode="r",encoding="utf-8"):
self.mode=mode
self.filename=open(filename,mode,encoding=encoding)
self.encoding=encoding # def read(self):
# pass
#
# def write(self):
# pass # def write(self,line):
# # print("----------->",line)
# t=time.strftime("%Y-%m-%d %X")
# self.filename.write(("%s %s"%(t,line) )) def __getattr__(self, item):
print(item,type(item))
return getattr(self.filename,item)#self.filename 内存地址 item(read方法 str类型) f1=Filehandle("a.text","w+","utf-8") # print(f1.filename)
# print(f1.__dict__)
# print(type(f1.read()))#触发__getattr__ f1.write("11\n")
f1.write("cpu负载过高\n")
f1.write("内存剩余不足\n")
f1.write("硬盘剩余不足\n") f1.seek(0)
print(f1.read()) # sys_f=open("b.text","w")
# print(getattr(sys_f,"read"))

python面向对象--包装标准类型及组合方式授权的更多相关文章

  1. Python面向对象-枚举类型enum

    枚举类型:在实际问题中,有些变量的值被限定在一个有限的范围内.例如:一个星期有且只有7天,一年有且只有十二个月,一个班每周有6门课程等等.如果把这些量说明为整型.字符串或者其他类型显然是不合适.编程界 ...

  2. Python面向对象关系

    首先了解一下Python面向对象中类型-实例和父类-子类的关系.下面的一些规则很有用. 当我们介绍许多不同的对象时,我们只用了两种关系(图4.1 关系): 是一类(is a kind of)(实线): ...

  3. python语言 buffer类型数据的使用 'ascii' codec can't decode byte 0xe5 问题的解决

    在python中我们使用buffer类型时可以将其转换为str类型. 如果obejct的类型为<type 'buffer'> ,可以使用str(object)将其转换为字符串类型. 在转换 ...

  4. Py-多态,封装,反射,描述符,包装标准类型,面向对象进阶

    多态: 对象可以通过他们共同的属性和动作来访问,而不需要考虑他们的类多态是继承的应用 class H2o: def __init__(self,temp): self.temp=temp def ht ...

  5. Python面向对象04 /封装、多态、鸭子类型、类的约束、super

    Python面向对象04 /封装.多态.鸭子类型.类的约束.super 目录 Python面向对象04 /封装.多态.鸭子类型.类的约束.super 1. 封装 2. 多态 3. 鸭子类型 4. 类的 ...

  6. python 面向对象专题(四):封装、多态、鸭子类型、类的约束、super

    https://www.cnblogs.com/liubing8/p/11321099.html 目录 Python面向对象04 /封装.多态.鸭子类型.类的约束.super 1. 封装 2. 多态 ...

  7. Python面向对象之鸭子类型

    python没有多态?他有什么? 他有鸭子类型. 鸭子类型 : 看着像鸭子,他就是鸭子. 比如一些类,他们中有一些方法,有着相同的功能, 这时为我们将这些相同功能的名字命名为一样的. 那么这些类 都互 ...

  8. python—面向对象设计

    一:三大编程范式 1.面向过程编程 2.函数式编程 3.面向对象编程 (类:把一类事物的相同的特征和动作整合到一起就是类,类是一个抽象的概念) (对象:就是基于类而创建的一个具体的事物 [具体存在的] ...

  9. python面向对象总结

    一 面向对象的程序设计的由来 见概述:http://www.cnblogs.com/linhaifeng/articles/6428835.html 二 什么是面向对象的程序设计及为什么要有它 面向过 ...

随机推荐

  1. 【CF1247E】Rock Is Push(DP,二分)

    题意:有一个n*m的方格,每一格可能为空也可能有石头,要从(1,1)走到(n,m),每次可以往右或往下走 每次走的时候都会将自己面前的所有石头向移动方向推一格,如果碰到了边界就推不过去 问方案数模1e ...

  2. Presenter 层

    后是 Presenter 层,它是处理业务逻辑和业务数据的,所以必须持有 Model 的引用,同时要将处理完的数据交给 View 层用于显示,也必须持有 View 的引用,那么,一开始我们就要把这两层 ...

  3. Spring 使用RedisTemplate操作Redis

    首先添加依赖: <!-- https://mvnrepository.com/artifact/redis.clients/jedis --> <dependency> < ...

  4. 修改 video.js 默认 bufferTime

    1.自建rtmp推流.转发.播放,前端用video.js 发现总延时在2秒多,服务器已优化,看看video.js能否优化 2.引用:在RTMP播放器侧,很重要的一点是:在  NetStream.set ...

  5. Ubuntu 系统搭建LNMP环境

    当前Linux版本:Ubuntu16.04 一.安装Nginx 在终端中输入命令 " sudo apt-get install nginx ",在确认安装完成后,在浏览器中访问 l ...

  6. loj#6157 A ^ B Problem

    分析 用并查集维护 每次一个连通块的每个点记录它到当前连通块的根的异或值 对于不符合的情况容易判断 最后判断是否都在一个连通块内然后记录答案即可 代码 #include<bits/stdc++. ...

  7. Jenkins获取运行job的用户名(在构建历史中展示构建人)

    首先安装插件: jenkins>>manage jenkins>> manage plugins>>可选插件>>搜索并安装插件: user build ...

  8. mysql_Qcahce

    .cpu mem disk 如果是固态硬盘ssd那就是高速公路 火箭 高铁 普通公路 mysql 配置文件:windows 下 mysql.ini linux:my.cnf lamp路径:/opt/l ...

  9. 多进程---multiprocessing/threading/

    一.多进程:multiprocessing模块 多用于处理CPU密集型任务 多线程 多用于IO密集型任务 Input Ouput 举例: import multiprocessing,threadin ...

  10. failed to open stream: HTTP request failed! HTTP/1.1 505 HTTP Version Not Supported

    PHP模拟GET请求支付宝退款链接(未用sdk  自己拼接的请求链接与参数); 起初用file_get_contents();就报错 :failed to open stream: HTTP requ ...