python-反射

本文详细介绍了Python中的反射机制,包括getattr()获取属性,hasattr()检查属性存在性,setattr()设置属性,delattr()删除属性,callable()判断对象可调用以及dir()列出所有属性。此外,还展示了如何使用getattr()和setattr()操作模块变量,以及动态导入模块的importlib库应用。
摘要由CSDN通过智能技术生成

在Python中,反射(Reflection)通常指的是在运行时检查和修改对象、类、模块等的属性和方法的能力。Python的动态特性使得它在反射方面非常灵活。以下是Python中反射的一些常见用法:

  1. getattr(): 获取对象的属性。如果属性不存在,可以指定一个默认值。
class MyClass:
    def __init__(self):
        self.my_attribute = 42

obj = MyClass()
print(getattr(obj, 'my_attribute'))  # 输出: 42
print(getattr(obj, 'non_existent_attribute', 'Default Value'))  # 输出: Default Value
  1. hasattr(): 检查对象是否具有某个属性。
class MyClass:
    def __init__(self):
        self.my_attribute = 42

obj = MyClass()
print(hasattr(obj, 'my_attribute'))  # 输出: True
print(hasattr(obj, 'non_existent_attribute'))  # 输出: False
  1. setattr(): 设置对象的属性。如果属性不存在,则创建它。
class MyClass:
    pass

obj = MyClass()
setattr(obj, 'my_attribute', 42)
print(obj.my_attribute)  # 输出: 42
  1. delattr(): 删除对象的属性。
class MyClass:
    def __init__(self):
        self.my_attribute = 42

obj = MyClass()
delattr(obj, 'my_attribute')
# print(obj.my_attribute)  # 这将引发AttributeError,因为属性已被删除
  1. callable(): 检查对象是否可以被调用(例如,是否是一个函数或方法)。
def my_function():
    pass

print(callable(my_function))  # 输出: True
print(callable(42))  # 输出: False
  1. dir(): 列出对象的所有属性和方法。这对于探索未知对象非常有用。
class MyClass:
    def my_method(self):
        pass

obj = MyClass()
print(dir(obj))  # 输出包含'my_method'和其他内置属性和方法的列表
  1. getattr() 和 setattr() 用于模块:你还可以使用getattr()setattr()来动态地获取和设置模块级别的变量和函数。
# mymodule.py 文件内容:
my_variable = 42

def my_function():
    return "Hello from my_function!"

# 主程序:
import mymodule

print(getattr(mymodule, 'my_variable'))  # 输出: 42
print(getattr(mymodule, 'my_function')())  # 输出: Hello from my_function!
  1. 动态导入模块:使用importlib库可以动态地导入模块。
import importlib

module_name = "math"  # 你可以根据需要更改此名称
module = importlib.import_module(module_name)
print(module.sqrt(16))  # 输出: 4.0(假设module_name被设置为"math")
  • 9
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值