# 实现授权是包装的一个特性。包装一个类型通常是对已存在的类型进行一些自定义定制,
# 这种做法可以新建,修改,或删除原有产品的某些功能,而其他的保持不变。
# 授权的过程,其实也就是所有的更新功能都交给新类的自定义的某部分功能来处理,但已存在的功能就授权给对象的默认属性。 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. R which

    setwd("E:/courses/molecular biology/homework1st") genes <- read.table('genes.txt',sep = ...

  2. 设计模式学习笔记——Composite 组合模式

    用于描述无限层级的复杂对象,类似于描述资源管理器,抽象出每一个层级的共同特点(文件夹和文件,展开事件) 以前描述一个对象,是将整个对象的全部数据都描述清楚,而组合模式通过在对象中定义自己,描述自己的下 ...

  3. spring学习笔记之---IOC和DI

    IOC和DI (一)IOC (1) 概念 IOC (Inverse of Control) 反转控制,就是将原本在程序中手动创建对象的控制权,交给spring框架管理.简单的说,就是创建对象控制权被反 ...

  4. [LOJ2289][THUWC2017]在美妙的数学王国中畅游:Link-Cut Tree+泰勒展开

    分析 又有毒瘤出题人把数学题出在树上了. 根据泰勒展开,有: \[e^x=1+\frac{1}{1!}x+\frac{1}{2!}x^2+\frac{1}{3!}x^3+...\] \[sin(x)= ...

  5. es之词库热更新解决方案

    1. 下载tomcat,作为远程词库的容器 , 需要在tomcat中配置词库 /webapp/ROOT这个路径下新建一个远程词库:​Vim hot.dicHot.dic中存放的就是实时热词 2.测试t ...

  6. [BZOJ4552]:[Tjoi2016&Heoi2016]排序(桶排序)

    题目传送门 题目描述 在2016年,佳媛姐姐喜欢上了数字序列. 因而她经常研究关于序列的一些奇奇怪怪的问题,现在她在研究一个难题,需要你来帮助她. 这个难题是这样子的:给出一个1到n的全排列,现在对这 ...

  7. 对象转json串.

    public static Object returnObject(String jsonStr, Class objClass) {if (jsonStr == null) {return null ...

  8. Linux中的atim、mtime、ctime

    - Linux中的atime.mtime.ctime 一.文件中的atime.mtime.ctime 1.含义及各种事件标记的显示方法 atime:最近一次访问文件的时间用ls -lu看到的时间为at ...

  9. react 类样式的一些使用方法

    在 css类不想使用穿透的状态,可以再webpack配置  modules:true,它位于css-loader下,此外调用css的类时可能会自动生成一个hash值,这时候如果想显示本来的名字,可以打 ...

  10. hive三种方式区别和搭建

    Hive 中 metastore(元数据存储)的三种方式:         a)内嵌 Derby 方式         b)Local 方式          c)Remote 方式    第一种方式 ...