day26-python之封装
1.动态导入模块
# module_t=__import__('m1.t')
# print(module_t)
# module_t = __import__('m1.t')
# print(module_t)
# module_t.t.test1()
# from m1.t import *
# from m1.t import test1,_test2
#
# test1()
# _test2()
# module_t.t.test1()
# from m1.t import *
# from m1.t import test1,_test2
# test1()
# _test2()
# import importlib
# m=importlib.import_module('m1.t')
# print(m)
# m.test1()
# m._test2()
import importlib
m = importlib.import_module('m1.t')
print(m)
m.test1()
m._test2()
2.包装标准类型
# class List(list):
# def append(self, p_object):
# if type(p_object) is str:
# # self.append(p_object)
# super().append(p_object)
# else:
# print('只能添加字符串类型')
#
# def show_midlle(self):
# mid_index=int(len(self)/2)
# return self[mid_index]
class List(list):
def append(self, p_object):
if type(p_object) is str:
super().append(p_object)
else:
print('只能添加字符串类型') def show_midlle(self):
mid_index = int(len(self)/2)
return self[mid_index] l1 = List('helloworld')
print(l1,type(l1))
print(l1.show_midlle())
# l1.append(111111111111111)
l1.append('SB')
print(l1) # l2=list('hell oworld')
# print(l2,type(l2)) # l1=List('helloworld')
# print(l1,type(l1))
# print(l1.show_midlle())
# l1.append(1111111111111111111111)
# l1.append('SB')
# print(l1)
3.双下划线开头的attr方法:
# class Foo:
# x=1
# def __init__(self,y):
# self.y=y
#
# def __getattr__(self, item):
# print('执行__getattr__')
#
# f1=Foo(10)
# print(f1.y)
# print(getattr(f1,'y')) #len(str)--->str.__len__()
# f1.sssssssssssssssssssssssssssssssssssss # class Foo:
# x=1
# def __init__(self,y):
# self.y=y
#
# def __delattr__(self, item):
# print('删除操作__delattr__')
#
# f1=Foo(10)
# del f1.y
# del f1.x #
# class Foo:
# x=1
# def __init__(self,y):
# self.y=y
#
# def __setattr__(self, key, value):
# print('__setattr__执行')
# # self.key=value
# self.__dict__[key]=value
# f1=Foo(10)
# print(f1.__dict__)
# f1.z=2
# print(f1.__dict__) # class Foo:
# def __getattr__(self, item):
# print('------------->')
#
# # print(Foo.__dict__)
# print(dir(Foo))
# f1=Foo()
#
# print(f1.x) #只有在属性不存在时,会自动触发__getattr__
#
# del f1.x #删除属性时会触发_delattr__
#
# f1.y=10
# f1.x=3 # 设置属性的时候会触发——setattr——— # class Foo:
# def __init__(self,name):
# self.name=name
# def __getattr__(self, item):
# print('你找的属性【%s】不存在' %item)
# def __setattr__(self, k,v):
# print('执行setattr',k,v)
# if type(v) is str:
# print('开始设置')
# # self.k=v #触发__setattr__
# self.__dict__[k]=v.upper()
# else:
# print('必须是字符串类型')
# def __delattr__(self, item):
# print('不允许删除属性【%s】' %item)
# print('执行delattr',item)
# del self.item
# self.__dict__.pop(item) # f1=Foo('alex')
# f1.age=18 #触发__setattr__
# print(f1.__dict__)
# print(f1.name)
# print(f1.age)
# print(f1.gender)
# print(f1.slary)
# print(f1.__dict__)
# del f1.name
# print(f1.__dict__)
4.反射
# class BlackMedium:
# feture='Ugly'
# def __init__(self,name,addr):
# self.name=name
# self.addr=addr
#
# def sell_hourse(self):
# print('【%s】 正在卖房子,傻逼才买呢' %self.name)
#
# def rent_hourse(self):
# print('【%s】 正在租房子,傻逼才租呢' % self.name)
#
#
# print(hasattr(BlackMedium,'feture'))
# getattr() class BlackMedium:
feture='Ugly'
def __init__(self,name,addr):
self.name = name
self.addr = addr def sell_hourse(self):
print('[%s]正在卖房子,傻逼才买呢'%self.name) def rent_hourse(self):
print('[%s]正在租房子,傻逼才租呢'%self.name) b1 = BlackMedium('万成置地', '天露园') #
# b1=BlackMedium('万成置地','天露园')
# b1.name--->b1.__dic__['name']
# print(b1.__dict__)
#
# # b1.name
# # b1.sell_hourse
# print(hasattr(b1,'name'))
# print(hasattr(b1,'sell_hourse'))
# print(hasattr(b1,'selasdfasdfsadfasdfasdfasdfasdl_hourse'))
#
#
#
# print(getattr(b1,'name'))
# print(getattr(b1,'rent_hourse'))
# func=getattr(b1,'rent_hourse')
# func()
# # print(getattr(b1,'rent_hourseasdfsa')) #没有则报错
# print(getattr(b1,'rent_hourseasdfsa','没有这个属性')) #没有则报错 b1.sb = True
setattr(b1,'sb',True)
setattr(b1,'sb1',123)
setattr(b1,'name','SB')
setattr(b1,'func',lambda x:x+1)
setattr(b1,'func1',lambda self:self.name+'sb') print(b1.func1(b1))
#
#
# # b1.sb=True
# setattr(b1,'sb',True)
# setattr(b1,'sb1',123)
# setattr(b1,'name','SB')
# setattr(b1,'func',lambda x:x+1)
# setattr(b1,'func1',lambda self:self.name+'sb')
# print(b1.__dict__)
# print(b1.func)
# print(b1.func(10))
# print(b1.func1(b1))
# del b1.sb
# del b1.sb1
# delattr(b1,'sb')
# print(b1.__dict__)
5.多态
#_*_coding:utf-8_*_
# __author__ = 'Linhaifeng'
# class H2O:
# def __init__(self,name,temperature):
# self.name=name
# self.temperature=temperature
# def turn_ice(self):
# if self.temperature < 0:
# print('[%s]温度太低结冰了' %self.name)
# elif self.temperature > 0 and self.temperature < 100:
# print('[%s]液化成水' %self.name)
# elif self.temperature > 100:
# print('[%s]温度太高变成了水蒸气' %self.name)
# def aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa(self):
# pass
__author__ = 'shiqianyu'
class H2O:
def __init__(self,name,temperature):
self.name = name
self.temperature = temperature
def turn_ice(self):
if self.temperature<0:
print('[%s]温度太低结冰了'%self.name)
elif self.temperature>0 and self.temperature<100:
print('[%s]液化成水'%self.name)
elif self.temperature>100:
print('[%s]温度太高变成了水蒸汽'%self.name)
def aaaaaaaaaaaaaaa(self):
pass
class Water(H2O):
pass
class Ice(H2O):
pass
class Steam(H2O):
pass # class Water(H2O):
# pass
# class Ice(H2O):
# pass
# class Steam(H2O):
# pass w1=Water('水',25)
i1=Ice('冰',-20)
s1=Steam('蒸汽',3000) # w1.turn_ice()
# i1.turn_ice()
# s1.turn_ice() # def func(obj):
# obj.turn_ice() # func(w1) #---->w1.turn_ice()
# func(i1) #---->i1.turn_ice()
# def func(obj):
# obj.turn_ice()
#
# func(w1)
# func(i1)
# func(s1) def func(obj):
obj.turn_ice() func(w1)
func(i1)
func(s1)
6.封装示范一
#_*_coding:utf-8_*_
# __author__ = 'Linhaifeng'
#
# class Room:
# def __init__(self,name,owner,width,length,high):
# self.name=name
# self.owner=owner
# self.__width=width
# self.__length=length
# self.__high=high
#
# def tell_area(self): #此时我们想求的是面积
# return self.__width * self.__length *self.__high
#
# def tell_width(self):
# return self.__width __author__ = 'shiqianyu'
class Room:
def __init__(self,name,owner,width,length,high):
self.name = name
self.owner = owner
self.__width = width
self.__length = length
self.__high = high def tell_area(self):
return self.__width*self.__length*self.__high def tell_width(self):
return self.__width r1 = Room('卫生','alex',100,100,500)
# area = r1.__width*r1.__length
print(r1.tell_area()) # r1=Room('卫生间','alex',100,100,10000) # arear=r1.__width * r1.__length
# print(r1.tell_area())
7.授权
# import time
# class FileHandle:
# def __init__(self,filename,mode='r',encoding='utf-8'):
# # self.filename=filename
# self.file=open(filename,mode,encoding=encoding)
# self.mode=mode
# self.encoding=encoding
# def write(self,line):
# print('------------>',line)
# t=time.strftime('%Y-%m-%d %X')
# self.file.write('%s %s' %(t,line))
#
# def __getattr__(self, item):
# # print(item,type(item))
# # self.file.read
# return getattr(self.file,item)
import time
class FileHandle:
def __init__(self,filename,mode='r',encoding='utf-8'):
self.file = open(filename,mode,encoding=encoding)
self.mode = mode
self.encoding = encoding def write(self,line):
print('-------------------->',line)
t = time.strftime('%Y-%m-%d %X')
self.file.write('%s %s'%(t,line)) def __getattr__(self, item):
return getattr(self.file,item) f1 = FileHandle('a.txt','w+')
f1.write('111111111111111\n')
f1.write('cpu负载过高\n')
f1.write('内存剩余不足\n')
f1.write('硬盘剩余不足\n')
f1.seek(0)
print(f1.read()) # f1=FileHandle('a.txt','w+')
# print(f1.file)
# print(f1.__dict__)
# print('==>',f1.read) #触发__getattr__
# print(f1.write)
# f1.write('1111111111111111\n')
# f1.write('cpu负载过高\n')
# f1.write('内存剩余不足\n')
# f1.write('硬盘剩余不足\n')
# f1.seek(0)
# print('--->',f1.read())
day26-python之封装的更多相关文章
- 将Python脚本封装成exe可执行文件 转
将Python脚本封装成exe可执行文件 http://www.cnblogs.com/renzo/archive/2012/01/01/2309260.html cx_freeze是用来将 Pyt ...
- python继承——封装
python继承--封装 1 为什么要封装 封装数据的主要原因是:保护隐私 封装方法的主要原因是:隔离复杂度 2 封装分为两个层面 第一个层面的封装(什么都不用做):创建类和对象会分别创建二者的名称空 ...
- 【转】Python基础-封装与扩展、静态方法和类方法
[转]Python基础-封装与扩展.静态方法和类方法 一.封装与扩展 封装在于明确区分内外,使得类实现者可以修改封装内的东西而不影响外部调用者的代码:而外部使用者只知道一个接口(函数),只要接口(函数 ...
- python 3 封装
python 3 封装 从封装本身的意思去理解,封装就好像是拿来一个麻袋,把小鱼,小虾,小王八,一起装进麻袋,然后把麻袋封上口子.照这种逻辑看,封装=‘隐藏’,这种理解是相当片面的. 先看如何隐藏 在 ...
- python面向对象-封装-property-接口-抽象-鸭子类型-03
封装 什么是封装: # 将复杂的丑陋的隐私的细节隐藏到内部,对外提供简单的使用接口 或 # 对外隐藏内部实现细节,并提供访问的接口 为什么需要封装 1.为了保证关键数据的安全性 2.对外部隐藏内部的实 ...
- python学习笔记:安装boost python库以及使用boost.python库封装
学习是一个累积的过程.在这个过程中,我们不仅要学习新的知识,还需要将以前学到的知识进行回顾总结. 前面讲述了Python使用ctypes直接调用动态库和使用Python的C语言API封装C函数, C+ ...
- python文件封装成*.exe
python文件封装成*.exe文件(单文件和多文件) 环境:win10 64位 python3.7 原文: https://www.cnblogs.com/jackzz/p/9431923.html ...
- 第7.9节 案例详解:Python类封装
上节介绍了Python中类的封装机制,本节结合一个具体例子进行详细说明. 我们定义一个Person类,其内部有姓名.年龄和类型三个实例变量,并定义了相关的存取方法: class Person(): ...
- python面向对象(封装,继承,多态)
python面向对象(封装,继承,多态) 学习完本篇,你将会深入掌握 如何封装一个优雅的借口 python是如何实现继承 python的多态 封装 含义: 1.把对象的属性和方法结合成一个独立的单位, ...
- day26 python学习 对象的接口,封装,私用属性 property
# 抽象类和接口类 #** #不崇尚接口类 #python本身支持多继承,没有接口专用的语法.但是我知道接口的概念 # 接口类:# 是规范子类的一个模板,只要接口类中定义的,就应该在子类中实现# 接口 ...
随机推荐
- service和Dao层有什么关系
Dao层:主要是做数据持久层的工作,负责与数据库进行联络的一些任务都封装在此,DAO层的设计首先是设计DAO的接口,然后就可在模块中调用此接口来进行数据业务的处理,而不用关心此接口的具体实现类是哪个类 ...
- android -------- SHA 加密算法
安全散列算法(英语:Secure Hash Algorithm,缩写为SHA)是一个密码散列函数家族,是FIPS所认证的安全散列算法.能计算出一个数字消息所对应到的,长度固定的字符串(又称消息摘要)的 ...
- openresty开发系列31--openresty执行流程
openresty开发系列31--openresty执行流程 我们先看个例子 location /test { set $a 32; echo $a; set $a 56; e ...
- Java算法 -- 桶排序
桶排序(Bucket sort)或所谓的箱排序,是一个排序算法,工作的原理是将数组分到有限数量的桶里.每个桶再个别排序(有可能再使用别的排序算法或是以递归方式继续使用桶排序进行排序).桶排序是鸽巢排序 ...
- 基于Wiremock创建Mock Service平台(转)
本文链接:https://blog.csdn.net/liuchunming033/article/details/52399397 ...
- [LeetCode] 282. Expression Add Operators 表达式增加操作符
Given a string that contains only digits 0-9 and a target value, return all possibilities to add bin ...
- linux查看磁盘是否SSD盘
命令: cat /sys/block/sda/queue/rotational 注意: 命令中的sba是你的磁盘名称,可以通过df命令查看磁盘,然后修改成你要的 结果: 返回0:SSD盘 返回1:SA ...
- C#基于RabbitMQ实现客户端之间消息通讯实战演练
一.背景介绍和描述 MQ消息队列已经逐渐成为企业IT系统内部通信的核心手段.它具有低耦合.可靠投递.广播.流量控制.最终一致性等一系列功能,成为异步RPC的主要手段之一.何时需要消息队列?当你需要使用 ...
- 【视频开发】【CUDA开发】ffmpeg nvenc编码
花时间研究了一些ffmpeg的nvenc,本来想我已经有了cuvid,然后又搞出来了nvenc,应该可以做个全套的英伟达的转码了,没想到ffmpeg官网下载的动态库没有cuvid,windows上编译 ...
- 【神经网络与深度学习】【计算机视觉】YOLO2
YOLO2 转自:https://zhuanlan.zhihu.com/p/25167153?refer=xiaoleimlnote 本文是对 YOLO9000: Better, Faster, St ...