hasattr(object, name)
- 作用:用于检查对象是否具有指定名称的属性或方法。
- 参数:
- object:要检查的对象。
- name:要检查的属性或方法的名称。
- 返回值:如果对象具有指定名称的属性或方法,则返回True;否则返回False。
class MyClass:
x = 10
def my_method(self):
pass
obj = MyClass()
print(hasattr(obj, 'x')) # True,obj具有属性'x'
print(hasattr(obj, 'my_method')) # True,obj具有方法'my_method'
print(hasattr(obj, 'y')) # False,obj不具有属性'y'
getattr(object, name[, default])
- 作用:用于获取对象的属性或方法。
- 参数:
- object:要获取属性或方法的对象。
- name:要获取的属性或方法的名称。
- default:可选参数,如果属性或方法不存在时返回的默认值,默认为None。
- 返回值:如果对象具有指定名称的属性或方法,则返回该属性或方法;否则,如果提供了default参数,则返回默认值;否则,抛出AttributeError异常。
class MyClass:
x = 10
def my_method(self):
pass
obj = MyClass()
print(getattr(obj, 'x')) # 10,获取属性'x'的值
print(getattr(obj, 'my_method')) # <bound method MyClass.my_method of <__main__.MyClass object at 0x7fb0f8e21730>>,获取方法'my_method'
print(getattr(obj, 'y')) # AttributeError: 'MyClass' object has no attribute 'y'
print(getattr(obj, 'y', 'default_value')) # 'default_value',属性'y'不存在,返回默认值
setattr(object, name, value)
- 作用:用于设置对象的属性。
- 参数:
- object:要设置属性的对象。
- name:要设置的属性的名称。
- value:要设置的属性的值。
- 返回值:无。
class MyClass:
pass
# 创建对象实例
obj = MyClass()
# 定义要动态添加的方法
def greet(self):
print("Hello!")
# 使用setattr()将方法绑定到对象上,并手动传递实例作为第一个参数
setattr(obj, 'say_hello', lambda: greet(obj))
# 调用动态添加的方法
obj.say_hello() # 输出 "Hello!"