Python进阶(11)—获取对象信息之反射

◎知识点

  1. 反射概念与使用示例


◎脚本练习

"""反射"""

"""
所谓"反射",指的是以字符串的形式来操作(包括:增删改查)对象的属性和方法

用于"反射"的内置函数有以下四个(参数name都是一个字符串)
1. hasattr(object, name)
    用于判断指定的对象object是否有参数name指定的属性和方法
2. getattr(object, name[, default])
    用于获取指定的对象object中名为name指定的属性或方法
    如果不指定参数default,那么当object中不存在名为name的属性或方法时,抛出AttributeError
    如果指定了参数default,那么当object中不存在名为name的属性或方法时,就会返回default
    getattr(object, name)等价于:object.name
3. setattr(object, name, value)
    用于在指定的对象object中添加或修改名为参数name的属性或方法,添加或修改后的值为value
    setattr(object, name, value)等价于:object.name = value
4. delattr(object, name)
    用于删除指定的对象object中名为参数name的属性或方法
    delattr(object, name)等价于:del object.name
    
    注意:只有在不知道对象信息的情况下,才会去获取对象的信息。因此,如果可以直接写:object.name,
    就不要写getattr(object, 'name')
"""

class MyClass(object):
    def __init__(self):
        self.x = 1

    def do_sth(self):
        print("do_sth被调用")

mc = MyClass()

print(hasattr(mc, 'x'))         # True
print(hasattr(mc, 'do_sth'))    # True
print(hasattr(mc, 'y'))         # False

print(getattr(mc, 'x'))     # 1

f = getattr(mc, 'do_sth')
f()     # do_sth被调用

# print(getattr(mc, 'y')) # AttributeError: 'MyClass' object has no attribute 'y'
print(getattr(mc, 'y', 2))  # 2

setattr(mc, 'z', 3)
print(getattr(mc, 'z')) # 3

setattr(mc, 'z', 4)
print(getattr(mc, 'z')) # 4

delattr(mc, 'z')
print(hasattr(mc, 'z')) # False

◎脚本地址:https://github.com/anzhihe/learning/blob/master/python/practise/learn-python/python_advanced/built-in_function2.py

anzhihe 安志合个人博客,版权所有 丨 如未注明,均为原创 丨 转载请注明转自:https://chegva.com/5282.html | ☆★★每天进步一点点,加油!★★☆ | 

您可能还感兴趣的文章!

发表评论

电子邮件地址不会被公开。 必填项已用*标注