VB.net 2010 视频教程 VB.net 2010 视频教程 python基础视频教程
SQL Server 2008 视频教程 c#入门经典教程 Visual Basic从门到精通视频教程
当前位置:
首页 > Python基础教程 >
  • 反射

  1.getattr(对象,'一个字符串') : 根据字符串的形式去某个对象中获取对象的成员

    - 获取类中的属性

复制代码
class Foo(object):
    def __init__(self,name):
        self.name  = name
    def func(self):
        print(666)

obj = Foo('张三')

# 获取实例变量
v = getattr(obj,'name')
print(v)  # 得到结果:  张三

#获取类中的方法
getattr(obj,'func')()  # 得到结果:  666 
复制代码

    - 获取当前py文件中的属性

复制代码
import sys

def func():
    print(666)

name = '李四'

getattr(sys.modules['__main__'],'func')()   # 执行fanc函数,得到结果:  666

ret = getattr(sys.modules['__main__']),'name')
print(ret)  # 得到结果:  李四
复制代码

    - 引用模块中的任意变量

复制代码
# demo.py 文件中的属性:
def func():
     print('in func')

name = '王二麻子'

class User(object):
    def  base(self):
        print('in base')
obj = User()



# 运行脚本的文件
import demo

getattr(a,'func')()    #  in func

getattr(a,name)    # 得到结果: 王二麻子

getattr(a.User,'base')()    #得到结果:  in base

print(getattr(a,'obj')    # # 得到结果: 内存地址
复制代码

 

   2. hasattr(对象,'一个字符串') : 根据字符串的形式去某个对象中判断是否有改成员 

复制代码
class A:
    job = 'IT'
    def __init__(self):
        self.name = 'alex'
        self.age = 83
    def func(self):
        print('in func')

obj = A()

print(hasattr(obj,'sex'))    # False
print(hasattr(obj,'func'))   # True

if hasattr(obj,'func'):
    if callable(getattr(obj,'func')):     # 判断这个函数是否可被调用
        getattr(obj,'func')()    # in func
复制代码

 

常用操作:

复制代码
class User:
    lis = [('登入','login'),
           ('注册','register'),
           ('删除文件','remove'),
           ('复制文件','copy')]
    def login(self):
        print('in login')
    def register(self):
        print('in register')
    def remove(self):
        print('in remove')
    def copy(self):
        print('in copy')

obj = User()
for index,item in enumerate(obj.lis,1):
    print(index,item[0])

while True:
    num = input('请选择要操作的序号:')
    if num.isdecimal() and 0 < int(num) <= len(obj.lis):
        if hasattr(obj,obj.lis[int(num)-1][1]):
            getattr(obj,obj.lis[int(num)-1][1])()
    else: print('输入有误')
复制代码

 

运行结果:

复制代码
1 登入
2 注册
3 删除文件
4 复制文件
请选择要操作的序号:1
in login
请选择要操作的序号:2
in register
请选择要操作的序号:3
in remove
请选择要操作的序号:4
in copy
复制代码

   3. setattr(对象,'变量','值') : 根据字符串的形式去某个对像中设置某个成员

复制代码
class Foo:
    pass
obj = Foo()

obj.k1 = 999

setattr(obj,'k1',123)    # 设置实例变量中的 k1 = 123   

       
print(obj.k1)     # 打印结果:  123
复制代码

 

   4. delattr(对象,'变量') :  根据字符串的形式去某个对象中删除成员

复制代码
class Foo:
    pass

obj = Foo()

obj.k1 = 999
print(obj.k1)    # 打印结果; 999 

delattr(obj,'k1')
print(obj.k1)    # k1 的变量已经删除,运行会报错
复制代码

 

 


相关教程