反射以及内置方法

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))       #北大
setatter

delatter方法:删除属性

  delatter(命名空间,‘变量名‘)

技术分享图片
1 class Foo:
2     country=China
3 def func():
4     print(qwer)
5 delattr(Foo,country)
6 print(Foo.__dict__)
delatter

反射类中的变量

反射对象中的变量

反射模块中的变量

反射本文件中的变量

 

内置方法

不需要程序员定义,本身就存在类中的方法就是内置方法,

不需要我们去调用,都有另外一种自动触发它的语法。

内置方法的形式:__方法名__

名字:双下方法、魔术方法、内置方法

__str__

__repr__

 

以上是关于反射以及内置方法的主要内容,如果未能解决你的问题,请参考以下文章

面向对象进阶:反射以及内置方法

Python学习第14篇:面向对象之反射以及内置方法

python基础27——反射&内置方法

Python反射介绍

java 反射代码片段

反射 内置方法