标准库学习

getattr() 是 Python 内置函数,用于获取对象的属性或方法。它接受两个参数,第一个参数是要获取属性或方法的对象,第二个参数是字符串,表示要获取的属性或方法的名称。

如果对象包含指定的属性或方法,则返回属性或方法的值,如果对象没有该属性或方法,则抛出 AttributeError 异常。如果指定了可选的第三个参数,它将作为默认值返回,如果找不到指定的属性或方法。

下面是一个简单的示例:

class MyClass:
    def __init__(self):
        self.my_attribute = 42

    def my_method(self):
        return "Hello world"

my_object = MyClass()

# 获取属性
attr_value = getattr(my_object, "my_attribute")
print(attr_value)  # 输出: 42

# 获取方法
method_value = getattr(my_object, "my_method")()
print(method_value)  # 输出: Hello world

# 获取不存在的属性,抛出AttributeError异常
invalid_attr_value = getattr(my_object, "not_exist")
# 输出: AttributeError: 'MyClass' object has no attribute 'not_exist'

注意,getattr() 只能获取在运行时发现的属性和方法,无法获取在编写代码时就已知的名称。如果需要动态获取类的属性或方法,可使用 vars()dir() 函数获取类的属性和方法列表,再使用字符串操作进行处理和过滤。

setattr() 是 Python 内置函数,用于设置对象的属性或方法。它接受三个参数,第一个参数是要设置属性或方法的对象,第二个参数是字符串,表示要设置的属性或方法的名称,第三个参数是要设置的属性或方法的值。

下面是一个简单的示例:

class MyClass:
    def __init__(self):
        self.my_attribute = 42

    def my_method(self):
        return "Hello world"

my_object = MyClass()

# 设置属性
setattr(my_object, "my_attribute", 100)
print(my_object.my_attribute)  # 输出: 100

# 设置方法
def new_method(self):
    return "New method"

setattr(my_object, "my_method", new_method)
new_method_value = my_object.my_method()
print(new_method_value)  # 输出: New method

注意,通过 setattr() 设置的属性或方法在运行时被添加到对象中,该对象的属性列表和方法列表都会变化。如果对象原本已经定义了指定名称的属性或方法,则设置将覆盖原有的属性或方法。如果需要可以使用 hasattr() 先检查对象是否已经定义了指定名称的属性或方法。