Python之类反射

Python之类反射

python中的反射功能是由以下四个内置函数提供:hasattr、getattr、setattr、delattr,该四个函数分别用于对对象内部执行:检查是否含有某成员、获取成员、设置成员、删除成员。

class Foo(object):

    def __init__(self):
        self.name = 'hongsong'
        self.age = 24

    def func(self):
        return 'haha'


obj = Foo()

# #### 检查是否含有成员 ####
print(hasattr(obj, 'name'))
print(hasattr(obj, 'func'))

# #### 获取成员 ####
print(getattr(obj, 'name'))
r = getattr(obj, 'func')
print(r)
print(r())


# #### 设置成员 ####
setattr(obj, 'age', 18)
v = getattr(obj,'age')
print(v)

# #### 删除成员 ####
#delattr(obj, 'name')
#delattr(obj, 'func')

输出:

True
True
hongsong
<bound method Foo.func of <__main__.Foo object at 0x0000028570883A20>>
haha
18

当我们要访问一个对象的成员时,应该是这样操作:

class Foo(object):

    def __init__(self):
        self.name = 'yy

    def func(self):
        return 'func'


obj = Foo()

# 访问字段
obj.name
# 执行方法
obj.func()

a、上述访问对象成员的 name 和 func 是什么?
答:是变量名
b、obj.xxx 是什么意思?
答:obj.xxx 表示去obj中或类中寻找变量名 xxx,并获取对应内存地址中的内容。

使用其他方式获取obj对象中的name变量指向内存中的值 “yy”

方式一:

class Foo(object):

    def __init__(self):
        self.name = 'yy'

    def func(self):
        return 'func'


obj = Foo()

print(obj.__dict__['name'])#输出yy

方式二:

class Foo(object):

    def __init__(self):
        self.name = 'yy'

    def func(self):
        return 'func'


obj = Foo()

print(getattr(obj, 'name'))#输出yy

结论:反射是通过字符串的形式操作对象相关的成员。一切事物都是对象!!!—》类也是对象、模块也是对象

猜你喜欢

转载自blog.csdn.net/hongsong673150343/article/details/88322198