python setattr用法详解
时间: 2023-04-23 10:03:57 浏览: 164
Python中的setattr()函数用于设置对象的属性值。它的语法如下:
setattr(object, name, value)
其中,object是要设置属性值的对象,name是属性名,value是属性值。
例如,我们可以使用setattr()函数来设置一个对象的属性值:
class Person:
def __init__(self, name, age):
self.name = name
self.age = age
p = Person("Tom", 20)
setattr(p, "age", 21)
print(p.age) # 输出21
在上面的例子中,我们创建了一个Person类的对象p,并设置了它的name和age属性。然后,我们使用setattr()函数将p的age属性值从20改为21,并输出了修改后的age属性值。
需要注意的是,如果要设置的属性不存在,setattr()函数会自动创建该属性。但是,如果对象是只读的,或者属性是只读的,那么setattr()函数将会抛出AttributeError异常。
相关问题
python的反射详解
在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中还有另一种反射机制,即使用元类。元类是用于创建类的类,可以通过元类来动态地创建、修改和删除类的属性和方法。元类的使用超出了本文的范围,感兴趣的读者可以自行学习。
阅读全文