反射以及内置方法
Posted zhigu
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了反射以及内置方法相关的知识,希望对你有一定的参考价值。
反射
反射是使用字符串数据类型的变量名来获取这个变量的值
a = 1
b = 2
name = ‘wang’
使用场景:
input:用户输入的如果是a,就打印1,如果是b,就打印2,如果是name,就打印‘wang’
文件:从文件中读出的字符串,转换成变量的名字
网络:将网络传输的字符串转换成变量的名字
反射类中的变量:静态属性,类方法,静态方法
getatter方法:用来获取属性
getatter(变量名:命名空间,‘字符串:属于一个命名空间内的变量名‘)
hasatter方法:检测是都含有某属性
hasatter(变量名,‘字符串‘)
1 class Foo: 2 def __init__(self,name,age): 3 self.name=name 4 self.age=age 5 6 def eating(self): 7 print(‘%s 在吃饭‘%self.name) 8 f1=Foo(‘wang‘,18) 9 print(getattr(f1,‘name‘)) #wang 10 print(getattr(f1,‘age‘)) #18 11 getattr(f1,‘eating‘)() #wang 在吃饭 12 print(hasattr(Foo,‘name‘)) #False 13 print(hasattr(f1,‘name‘)) #True 14 15 #反射实现 16 while True: 17 inp=input(‘>>>‘) 18 if hasattr(Foo,inp): #判断用户输入的内容是否在Foo中 19 print(getattr(Foo,inp)) #如果有则获取并打印
反射模块中的变量
反射文本文件中的变量
1 a = 1 2 b = 2 3 name = ‘wang‘ 4 def qwer(): 5 print(‘qwer‘) 6 class Foo:pass 7 import sys 8 print(sys.modules[__name__]) #<module ‘__main__‘ from ‘E:/play/ccc.py‘> 9 print(getattr(sys.modules[__name__],‘a‘)) #1 10 print(getattr(sys.modules[__name__],‘name‘)) #wang 11 getattr(sys.modules[__name__],‘qwer‘)() #qwer 12 print(getattr(sys.modules[__name__],‘Foo‘)) #<class ‘__main__.Foo‘> 13 obj = getattr(sys.modules[__name__],‘Foo‘)() 14 print(obj) # <__main__.Foo object at 0x0000029EA2F40400>
setatter方法:设置属性
setatter(命名空间,‘变量名‘,‘变量值‘)
1 class Foo: 2 country=‘China‘ 3 def func(): 4 print(‘qwer‘) 5 setattr(Foo,‘school‘,‘北大‘) 6 print(getattr(Foo,‘school‘)) #北大
delatter方法:删除属性
delatter(命名空间,‘变量名‘)
1 class Foo: 2 country=‘China‘ 3 def func(): 4 print(‘qwer‘) 5 delattr(Foo,‘country‘) 6 print(Foo.__dict__)
反射类中的变量
反射对象中的变量
反射模块中的变量
反射本文件中的变量
内置方法
不需要程序员定义,本身就存在类中的方法就是内置方法,
不需要我们去调用,都有另外一种自动触发它的语法。
内置方法的形式:__方法名__
名字:双下方法、魔术方法、内置方法
__str__
__repr__
以上是关于反射以及内置方法的主要内容,如果未能解决你的问题,请参考以下文章