python的反射详解
时间: 2023-10-18 11:21:34 浏览: 153
第七周-第07章节-Python3.5-反射详解1.avi
在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中还有另一种反射机制,即使用元类。元类是用于创建类的类,可以通过元类来动态地创建、修改和删除类的属性和方法。元类的使用超出了本文的范围,感兴趣的读者可以自行学习。
阅读全文