Day8 面向对象反射 item方法 打印对象信息__str__ 构析方法__del__ 程序的异常处理
反射:通过字符串来访问到所对应的值(反射到真实的属性上)。
eg:
class Foo:
x=1
def __init__(self,name):
self.name=name def f1(self):
print('from f1') # print(Foo.x) #Foo.__dict__['x'] f=Foo('egon')
# print(f.__dict__)
#
# #1:
# print(f.name) #2:
# print(f.__dict__['name']) #hasattr
#反射到字典所对应的值
# print(hasattr(f,'name')) #f.name
# print(hasattr(f,'f1')) #f.f1
# print(hasattr(f,'x')) #f.x #setattr
#设置某个属性
# setattr(f,'age',18)#f.age=18 #getattr
#得到某个属性的值
# print(getattr(f,'name'))#f.name
# print(getattr(f,'abc',None))#f.abc
# print(getattr(f,'name',None))#f.abc # func=getattr(f,'f1')#f.f1
# print(func)
# func()
# #delattr
#删除某个属性的值
# delattr(f,'name')# del f.name
# print(f.__dict__)
定义某个功能,输入某条命令,打印下面的功能:
class Ftpserver:
def __init__(self,host,port):
self.host=host
self.port=port def run(self):
while True:
cmd=input('>>: ').strip()
if not cmd:continue
if hasattr(self,cmd):
func=getattr(self,cmd)
func()
def get(self):
print('get func') def put(self):
print('put func')
item系列:
当触发某些属性的时候,执行某些操作。
1 class Foo:
2 def __getitem__(self, item):
3 print('=====>get')
4 return self.__dict__[item] #执行你想要的操作
5
6 def __setitem__(self, key, value):
7 self.__dict__[key]=value
8 # setattr(self,key,value) #执行你想要的操作
9
10 def __delitem__(self, key):
11 self.__dict__.pop(key) 执行你想要的操作
12
13
14 f=Foo()
15 # f.x=1
16 # print(f.x)
17 # print(f.__dict__)
18
19 f['x']=123123123123
20
21 # del f['x']
22
23 print(f['x'])
__str__:打印对象信息
在对象被打印的时候触发执行,只能返回字符串类型。
class People:
def __init__(self,name,age,sex):
self.name=name
self.age=age
self.sex=sex def __str__(self): #在对象被打印时触发执行
return '<name:%s age:%s sex:%s>' %(self.name,self.age,self.sex) p1=People('egon',18,'male')
p2=People('alex',38,'male') print(p1)
print(p2)
__del__:在对象资源被释放的时候时触发。
eg:
class Foo:
def __init__(self,x):
self.x=x def __del__(self): #在对象资源被释放时触发
print('-----del------')
f=Foo(100000)
print('=======================>')
这种相当于在函数执行完了,
触发__del__这个方法
以后打印一个('-----del------')
如果在程序的执行过程中加入 del (删除某个值得操作)
也会触发程序的执行
class Foo:
def __init__(self,x):
self.x=x def __del__(self): #在对象资源被释放时触发
print('-----del------')
print(self) f=Foo(100000)
del f
print('=======================>')
程序异常的处理:
异常就是程序中运行是发生错误,错误的类型主要有这么几种:
1,语法错误(必须在程序运行之前解决)
2,逻辑错误
3,数据类型错误
4,索引错误
5,字典的key错误
如果错误发生的条件是不可预知的,则需要用到try....expect:在错误发生之后进行处理
基本语法为:
try:
被检测的代码块
expect 异常类型:
try中一旦检测到异常,就执行这个位置的逻辑
try:
aaaa
print('==-==>1')
# l=[]
# l[3]
# print('==-==>2')
# d={}
# d['x']
# print('==-==>3')
except NameError as e:
print(e)
except IndexError as e:
print(e)
except KeyError as e:
print(e)
except Exception as e:
print(e)
else:
print('在没有错误的时候执行')
finally:
print('无论有无错误,都会执行')
#raise ...... 在执行到某段的时候,自己抛出异常
#什么时候用try.....expect
是错误一定会发生,但是不确定在什么时候预知的条件时,用这个条件
Day8 面向对象反射 item方法 打印对象信息__str__ 构析方法__del__ 程序的异常处理的更多相关文章
- 跟着百度学PHP[4]OOP面对对象编程-6-构造方法(__construct)和构析方法(__destruct)
函数就是成员方法(方法有三:构造方法.成员方法.析构方法) 下面是两种方法. 构造方法和构析方法 00x1 构造方法 构造方法会在创建对象之后自动调用.其名称为__construct <?php ...
- python面向对象( item系列,__enter__ 和__exit__,__call__方法,元类)
python面向对象进阶(下) item系列 __slots__方法 __next__ 和 __iter__实现迭代器 析构函数 上下文管理协议 元类一.item系列 把对象操作属性模拟成字典的 ...
- Java反射获取类和对象信息全解析
反射可以解决在编译时无法预知对象和类是属于那个类的,要根据程序运行时的信息才能知道该对象和类的信息的问题. 在两个人协作开发时,你只要知道对方的类名就可以进行初步的开发了. 获取类对象 Class.f ...
- print(dir(...)) 打印对象或者类中的方法和函数
- php 抽象类、接口和构析方法
<?php /*class Ren { public static $color; static function Show() { Car::$name; self::$color; } } ...
- python全栈开发从入门到放弃之面向对象反射
1.classmethod.staticmethod方法 classmethod类方法默认参数cls,可以直接用类名调用,可以与类属性交互 #student文件内容 宝宝,男 博博,女 海娇,男 海燕 ...
- Java学习day9面向对象编程2-方法的可变个数的参数和方法的参数传递
一.方法的可变个数的参数. 问题:我们能够打印的信息都是来源于方法的参数,也就是形参的传递.那如何要给方法传递不同的参数? .1.采用数组形参来定义方法 public static void test ...
- java基础之对象当做参数传进方法的堆栈内存解析
值类型当做参数传进方法: 引用类型对象当做参数传进方法: String字符串当做参数传进方法:
- SpringBoot 使用 RestTemplate 调用exchange方法 显示错误信息
SpringBoot使用RestTempate SpringBoot使用RestTemplate摘要认证 SpringBoot使用RestTemplate基础认证 SpringBoot使用RestTe ...
随机推荐
- Java-IO之BufferedWriter(字符缓冲输出流)
BufferedWriter是字符缓冲输出流,继承于Writer,作用是为其他字符输出流添加一些缓冲功能. BufferedWriter主要的函数列表: BufferedWriter(Writer o ...
- SQL 2012 Always On 为 MSCRMSqlClrLogin SQL 登录名创建非对称密钥时报语法错误
根据实施手册中的下图的SQL在为MSCRMSqlClrLogin 创建非对称秘钥时报语法错误,具体的错误在就path那,调了多次还是报错,索性就把SQL拆开执行. 先执行这条 SELECT * FRO ...
- 关于android app签名文件获取sha1和MD值
最近在做百度地图的嵌入,因为从同事接手的android app,所以第一次接触android的签名. 总的来说签名还比较简单,我用的是eclipse ADT自带的签名工具来做的签名,方法如下: 选择项 ...
- Gradle 1.12 翻译——第十五章. 任务详述
有关其他已翻译的章节请关注Github上的项目:https://github.com/msdx/gradledoc/tree/1.12,或访问:http://gradledoc.qiniudn.com ...
- Spring - IOC简介
DI(Dependence Injection)依赖注入: userService依赖于容器注入的 这样拿的 这个过程由容器来控制,这个称为依赖注入. IOC(Inverse of control)控 ...
- 如何利用BI搭建电商数据分析平台
某电商是某大型服装集团下的重要销售平台.2015 年,该集团品牌价值达数百亿元,产品质量.市场占有率.出口创汇.销售收入连年居全国绒纺行业第一,在中国有终端店3000多家,零售额80 亿.其羊绒制品年 ...
- (五十八)NSObject实现多线程、自动释放池的补充
模拟一个图片下载的场景,图片的下载需要2s,在这期间为了保证程序的流畅,应该把图片的下载放在子线程中进行. 使用NSObject的方法performSelectorInBackground方法即可实现 ...
- python的join(string)函数
join是字符串操作函数,操作的也是字符串. key="\t".join(('a','b','c')) result= key.split("\t") prin ...
- Android必知必会--NinePatch图片制作
本文为CSDN学院免费课程<NinePatch图片制作从入门到精通>的笔记,建议新手先观看视频,整理此笔记是为了便于自己复习,有NinePatch基础的朋友可以直接观看第四部分.--[转载 ...
- ISLR系列:(3)重采样方法 Cross-Validation & Bootstrap
Resampling Methods 此博文是 An Introduction to Statistical Learning with Applications in R 的系列读书笔记,作为本人的 ...