python反射详解

"""
1.什么是反射:
    把字符映射到实例的变量或实例的方法,然后可以去执行调用、修改
    反射的本质(核心):基于字符串的事件驱动,利用字符串的形式去操作对象/模块中成员(方法、属性)
2.反射的四个重要方法
    1)getattr获取对象属性/对象方法
    2)hasattr判断对象是否有对应的属性及方法
    3)delattr删除指定的属性
    4)setattr为对象设置内容
"""
class TestObject:
    def __init__(self,name,age):
        self.name = name
        self.age = age
    def test(self):
        print("执行test方法")
def a():
    print("类的外部方法")
if __name__ == '__main__':
    """1.getattr 获取对象属性、对象方法"""
    xiaoyu = TestObject("小于",20)
    #获取对象的属性
    print(getattr(xiaoyu,"name"))
    #获取对象的方法
    result = getattr(xiaoyu,"test")
    print(type(result))
    result()
    """2.hasattr 判断对象是否有对应的属性、方法"""
    if hasattr(xiaoyu,"address"):
        print(getattr(xiaoyu, "address"))
    if hasattr(xiaoyu,"name"):
        print(getattr(xiaoyu, "name"))
    """3.delattr 删除属性"""
    # delattr(xiaoyu,"name")
    """4.setattr 为对象设置内容"""
    #修改属性的值
    setattr(xiaoyu,"name","liuwei")
    print(getattr(xiaoyu, "name"))
    #修改方法
    setattr(xiaoyu,"test11",a)
    getattr(xiaoyu,"test11")()
    #相当于增加了test11方法
    xiaoyu.test11()
"""
去实现某个业务,定义类,类里面封装了很多方法,提供一个统一的入口能够调用各种方法
业务:登录   退出  注册  注销
"""
class Test:
    func_list = ["login","loginOut","register","delete"]
    def login(self):
        print("这是登录")

    def loginOut(self):
        print("这是退出")

    def  register(self):
        print("这是注册")

    def delete(self):
        print("这是注销")

    #1.login    2.loginOut  3.register  4.delete
    def run(self,num):
        getattr(self,self.func_list[num-1])()
num = int(input("请输入你的操作(1.login    2.loginOut  3.register  4.delete):"))
Test().run(num)

  • 3
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Python中,反射是指通过字符串的形式去访问对象的属性、方法和其他成员。Python中的每个对象都有一组内置的特殊属性和方法,比如 `__dict__`、`__class__`、`__name__`、`__bases__` 等等。这些属性和方法可以通过反射机制来访问和操作。 Python中的反射通常涉及到以下三个内置函数: 1. `hasattr(object, attribute)`:检查对象是否具有指定的属性或方法。 2. `getattr(object, attribute[, default])`:获取对象的属性或方法。如果属性或方法不存在,则返回默认值(如果指定了)或引发 AttributeError 异常。 3. `setattr(object, attribute, value)`:设置对象的属性或方法。 下面是一些示例: ```python class MyClass: def __init__(self): self.x = 10 def my_method(self): print("Hello, World!") # 创建一个对象 obj = MyClass() # 使用 getattr 获取对象的属性和方法 print(getattr(obj, 'x')) # 输出: 10 getattr(obj, 'my_method')() # 输出: Hello, World! # 使用 hasattr 检查对象是否具有属性和方法 print(hasattr(obj, 'x')) # 输出: True print(hasattr(obj, 'y')) # 输出: False # 使用 setattr 设置对象的属性和方法 setattr(obj, 'y', 20) print(obj.y) # 输出: 20 setattr(obj, 'my_method', lambda: print("Hello, Python!")) obj.my_method() # 输出: Hello, Python! ``` 除了使用内置函数之外,Python中还有另一种反射机制,即使用元类。元类是用于创建类的类,可以通过元类来动态地创建、修改和删除类的属性和方法。元类的使用超出了本文的范围,感兴趣的读者可以自行学习。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值