Python基础day-22[面向对象:反射,其他命令参数]
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python基础day-22[面向对象:反射,其他命令参数]相关的知识,希望对你有一定的参考价值。
反射:
什么是反射:
主要是指程序可以访问,检测和修改本身状态或行为的一种能力。
Python中的一切事物都是对象。
四个实现自省的函数:
类和对象均可以使用。
class A: name = ‘abc‘ age = 19 #类的使用 print(hasattr(A,‘n1me‘)) #判断类是否含有某个属性 hasattr(类或者对象名,属性名) print(getattr(A,‘name‘)) #获取对应属性的属性值 getattr(类或者对象名,属性名,出错返回的内容) <----出错返回内容如果不写的话,当获取一个不存在的属性会报错,写了就会返回写的内容 setattr(A,‘name‘,‘aaa‘) #设置属性的属性值 setattr(类或者对象名,属性名,属性值) print(A.name) print(A.__dict__) delattr(A,‘name‘) #删除属性 delattr(类或者对象名,属性名) print(A.__dict__) #对象的使用 p1 = A() #实例化对象,下方使用方法同上 print(hasattr(p1,‘age‘)) print(getattr(p1,‘age‘)) setattr(p1,‘age‘,20) print(p1.age) delattr(p1,‘age‘) print(p1.__dict__) 执行结果: D:\Python\Python36-32\python.exe E:/Python/DAY-22/练习.py False abc aaa {‘__module__‘: ‘__main__‘, ‘name‘: ‘aaa‘, ‘age‘: 19, ‘__dict__‘: <attribute ‘__dict__‘ of ‘A‘ objects>, ‘__weakref__‘: <attribute ‘__weakref__‘ of ‘A‘ objects>, ‘__doc__‘: None} {‘__module__‘: ‘__main__‘, ‘age‘: 19, ‘__dict__‘: <attribute ‘__dict__‘ of ‘A‘ objects>, ‘__weakref__‘: <attribute ‘__weakref__‘ of ‘A‘ objects>, ‘__doc__‘: None} True 19 20 {} Process finished with exit code 0
其他命令参数:
__str__:改变对象的字符串显示。
原来是在类中定义一个显示信息的函数,并且每次调用的时候都需要对象+方法调用才能使用,使用__str__ 后我们可以直接print这个对象就可以显示信息了。
class Peolple: def __init__(self,name,age,sex): self.name = name self.age = age self.sex = sex def __str__(self): return ‘Name%s\nAge:%s\nSex:%s‘%(self.name,self.age,self.sex) #定义信息返回格式 a = Peolple(‘abc‘,18,‘male‘) print(a) 执行结果: D:\Python\Python36-32\python.exe E:/Python/DAY-22/练习.py Nameabc Age:18 Sex:male Process finished with exit code 0
__del__:删除
清理对象使用,对象执行完毕或者被清理时触发执行。
class Peolple: def __init__(self,name,age,sex): self.name = name self.age = age self.sex = sex def __str__(self): return ‘Name:%s\nAge:%s\nSex:%s‘%(self.name,self.age,self.sex) def __del__(self): print(‘%s is del‘%self.name) a = Peolple(‘abc‘,18,‘male‘) del a #对象 a 被删除,触发__del__ print(‘----------main program--------------‘) 执行结果: D:\Python\Python36-32\python.exe E:/Python/DAY-22/练习.py abc is del ----------main program-------------- Process finished with exit code 0 换一下: class Peolple: def __init__(self,name,age,sex): self.name = name self.age = age self.sex = sex def __str__(self): return ‘Name:%s\nAge:%s\nSex:%s‘%(self.name,self.age,self.sex) def __del__(self): print(‘%s is del‘%self.name) a = Peolple(‘abc‘,18,‘male‘) print(‘----------main program--------------‘) #程序执行完毕后,清理 a对象时触发__del__ 执行结果: D:\Python\Python36-32\python.exe E:/Python/DAY-22/练习.py ----------main program-------------- abc is del Process finished with exit code 0
使用类似查看字典等中括号形式,访问对应的属性:
类似:print(a[‘name‘])
class Peolple: def __init__(self,name,age,sex): self.name = name self.age = age self.sex = sex def __getitem__(self, item): #查询属性 return getattr(self, item) def __setitem__(self, key, value): #设置属性 setattr(self,key,value) def __delitem__(self, key): #删除属性 delattr(self,key) a = Peolple(‘abc‘,18,‘male‘) #实例化对象 print(a[‘name‘]) #获取name的属性值 a[‘name‘] = ‘a‘ #设置name的属性值 print(a[‘name‘]) del a[‘name‘] #删除name 属性 print(a.__dict__) 执行结果: D:\Python\Python36-32\python.exe E:/Python/DAY-22/练习.py abc a {‘age‘: 18, ‘sex‘: ‘male‘} Process finished with exit code 0
以上是关于Python基础day-22[面向对象:反射,其他命令参数]的主要内容,如果未能解决你的问题,请参考以下文章