python面向对象--包装标准类型及组合方式授权
# 实现授权是包装的一个特性。包装一个类型通常是对已存在的类型进行一些自定义定制,
# 这种做法可以新建,修改,或删除原有产品的某些功能,而其他的保持不变。
# 授权的过程,其实也就是所有的更新功能都交给新类的自定义的某部分功能来处理,但已存在的功能就授权给对象的默认属性。 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面向对象--包装标准类型及组合方式授权的更多相关文章
- Python面向对象-枚举类型enum
枚举类型:在实际问题中,有些变量的值被限定在一个有限的范围内.例如:一个星期有且只有7天,一年有且只有十二个月,一个班每周有6门课程等等.如果把这些量说明为整型.字符串或者其他类型显然是不合适.编程界 ...
- Python面向对象关系
首先了解一下Python面向对象中类型-实例和父类-子类的关系.下面的一些规则很有用. 当我们介绍许多不同的对象时,我们只用了两种关系(图4.1 关系): 是一类(is a kind of)(实线): ...
- python语言 buffer类型数据的使用 'ascii' codec can't decode byte 0xe5 问题的解决
在python中我们使用buffer类型时可以将其转换为str类型. 如果obejct的类型为<type 'buffer'> ,可以使用str(object)将其转换为字符串类型. 在转换 ...
- Py-多态,封装,反射,描述符,包装标准类型,面向对象进阶
多态: 对象可以通过他们共同的属性和动作来访问,而不需要考虑他们的类多态是继承的应用 class H2o: def __init__(self,temp): self.temp=temp def ht ...
- Python面向对象04 /封装、多态、鸭子类型、类的约束、super
Python面向对象04 /封装.多态.鸭子类型.类的约束.super 目录 Python面向对象04 /封装.多态.鸭子类型.类的约束.super 1. 封装 2. 多态 3. 鸭子类型 4. 类的 ...
- python 面向对象专题(四):封装、多态、鸭子类型、类的约束、super
https://www.cnblogs.com/liubing8/p/11321099.html 目录 Python面向对象04 /封装.多态.鸭子类型.类的约束.super 1. 封装 2. 多态 ...
- Python面向对象之鸭子类型
python没有多态?他有什么? 他有鸭子类型. 鸭子类型 : 看着像鸭子,他就是鸭子. 比如一些类,他们中有一些方法,有着相同的功能, 这时为我们将这些相同功能的名字命名为一样的. 那么这些类 都互 ...
- python—面向对象设计
一:三大编程范式 1.面向过程编程 2.函数式编程 3.面向对象编程 (类:把一类事物的相同的特征和动作整合到一起就是类,类是一个抽象的概念) (对象:就是基于类而创建的一个具体的事物 [具体存在的] ...
- python面向对象总结
一 面向对象的程序设计的由来 见概述:http://www.cnblogs.com/linhaifeng/articles/6428835.html 二 什么是面向对象的程序设计及为什么要有它 面向过 ...
随机推荐
- C# 创建临时文件(转帖)
1. 在临时文件只能够创建一个临时文件并返回该文件的完整路径 // 在临时文件只能够创建一个临时文件并返回该文件的完整路径: // C:\Documents and Settings\YourName ...
- BigDecimal保留两位小数,或指定精确的位数
public static void main(String[] args) { BigDecimal t1 = new BigDecimal("3.15289"); BigDec ...
- spring boot 集成 mybatis 单元测试Dao层 控制台报错:org.apache.ibatis.binding.BindingException: Invalid bound statement (not found):
最近帮同学做毕业程序,采用后端spring boot + mybatis + H2,将框架搭好进行各层的单元测试时,在dao层就出现了错,如图 于是在网上找各种资料,有的说是xml文件和接口没有一一对 ...
- 170911-关于maven的知识点
简介: 什么是maven 是apache下的一个开源项目,是纯java开发,并且只是用来管理java项目的. Maven的好处? 节省空间 就是对jar包的统一管理就是对jar包的统一管理,依赖 ...
- DB数据库的基本操作
启动 MongoDB 服务 sudo service mongodb start 进入 MongoDB 命令行操作界面,在命令行中敲 exit 可以退出.mongo 创建数据库 use db 命令查看 ...
- MacOS上zsh环境设置默认jdk
进入home目录 cd ~ 修改.zprofile文件 vi .zprofile 按i进入vim插入模式,添加以下代码 export JAVA_HOME="/Library/Java/Jav ...
- What is the difference between Kill and Kill -9 command in Unix?
w difference kill -9 pid and kill pid command - Ask Ubuntu https://askubuntu.com/questions/791841/d ...
- pc显示,手机隐藏
<div class="none"><img src="https://www.foresthouse.cn/bigpic.jpg"/> ...
- LongAdder 源码分析
LongAdder LongAdder 能解决什么问题?什么时候使用 LongAdder? 1)LongAdder 内部包含一个基础值[base]和一个单元[Cell]数组. 没有竞争的情况下,要累加 ...
- centos修改时区,同步时间
查看当前系统时区 ls -la /etc/localtime 查看支持的时区 timedatectl list-timezones # 查看所有时区 timedatectl list-timezone ...