博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Day8 面向对象反射 item方法 打印对象信息__str__ 构析方法__del__ 程序的异常处理...
阅读量:6427 次
发布时间:2019-06-23

本文共 3108 字,大约阅读时间需要 10 分钟。

反射:通过字符串来访问到所对应的值(反射到真实的属性上)。

eg:

1 class Foo: 2     x=1 3     def __init__(self,name): 4         self.name=name 5  6     def f1(self): 7         print('from f1') 8  9 10 # print(Foo.x) #Foo.__dict__['x']11 12 f=Foo('egon')13 # print(f.__dict__)14 #15 # #1:16 # print(f.name)17 18 #2:19 # print(f.__dict__['name'])20 21 #hasattr22 #反射到字典所对应的值23 # print(hasattr(f,'name')) #f.name24 # print(hasattr(f,'f1')) #f.f125 # print(hasattr(f,'x')) #f.x26 27 28 #setattr   29 #设置某个属性30 # setattr(f,'age',18)#f.age=1831 32 #getattr33 #得到某个属性的值34 # print(getattr(f,'name'))#f.name35 # print(getattr(f,'abc',None))#f.abc36 # print(getattr(f,'name',None))#f.abc37 38 # func=getattr(f,'f1')#f.f139 # print(func)40 # func()41 #42 43 #delattr44 #删除某个属性的值45 # delattr(f,'name')# del f.name46 # 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 '
' %(self.name,self.age,self.sex)p1=People('egon',18,'male')p2=People('alex',38,'male')print(p1)print(p2)

 

__del__:在对象资源被释放的时候时触发。

eg:

1 class Foo: 2     def __init__(self,x): 3         self.x=x 4  5     def __del__(self): #在对象资源被释放时触发 6         print('-----del------') 8  9 f=Foo(100000)10 print('=======================>')

这种相当于在函数执行完了,

触发__del__这个方法

以后打印一个('-----del------')

如果在程序的执行过程中加入  del  (删除某个值得操作)

也会触发程序的执行

 

class Foo:    def __init__(self,x):        self.x=x    def __del__(self): #在对象资源被释放时触发        print('-----del------')        print(self)f=Foo(100000)del fprint('=======================>')

 

程序异常的处理:

异常就是程序中运行是发生错误,错误的类型主要有这么几种:

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

是错误一定会发生,但是不确定在什么时候预知的条件时,用这个条件

 

转载于:https://www.cnblogs.com/sexiaoshuai/p/7419775.html

你可能感兴趣的文章
初识Linux-2
查看>>
内联函数
查看>>
eclipse粘贴多行
查看>>
常见的APP性能测试指标
查看>>
C语言:判断一个字符串是否为另外一个字符串旋转之后的字符串。(左旋右旋、求子串)...
查看>>
2016年linux运维人员必会开源运维工具体系
查看>>
老李分享:持续集成学好jenkins之Git和Maven配置
查看>>
mkdir命令
查看>>
求一个数二进制中1的个数(优化)。判断一个数是不是2的n次方
查看>>
03.Beetl模板变量以及自定义模板配置---《Beetl视频课程》
查看>>
【安全牛学员笔记】存储型XSS和BEEF浏览器***框架
查看>>
《电信快报》2016.7目录
查看>>
硬链接和链接(符号链接)
查看>>
Volley(2) 源码解读
查看>>
更新数据
查看>>
spring读取properties配置
查看>>
Oracle的体系结构(四)
查看>>
tornado+datatables分页
查看>>
集成 Kubernetes 与 Cloud Foundry,IBM自有一套
查看>>
精通Python爬虫从Scrapy到移动应用(文末福利)
查看>>