1、hasattr()函数
用来判断某个类实例对象是否包含指定名称的属性或方法,返回True或False
class Person:
def __init__(self):
self.name = "张三"
self.age = 33
def eat(self):
print("在吃饭")
per = Person()
print(hasattr(per,"name")) # True
print(hasattr(per,"say")) # False
2、getattr()函数
获取某个类实例对象中指定属性的值,和 hasattr() 函数不同,该函数只会从类对象包含的所有属性中进行查找
getattr(obj, name[, default])
obj 表示指定的类实例对象,name 表示指定的属性名,而 default 是可选参数,用于设定该函数的默认返回值,即当函数查找失败时,如果不指定 default 参数,则程序将直接报 AttributeError 错误,反之该函数将返回 default 指定的值
class Person:
def __init__(self):
self.name = "张三"
self.age = 33
def eat(self):
print("在吃饭")
per = Person()
print(getattr(per,"name")) # 张三
print(getattr(per,"eat")) # <bound method Person.eat of <__main__.Person object at 0x7ff048078850>>
print(getattr(per,"sex","无此属性")) # 无此属性
3、setattr()函数
它最基础的功能是修改类实例对象中的属性值。其次,它还可以实现为实例对象动态添加属性或者方法
如何通过该函数修改某个类实例对象的属性值:
class Person:
def __init__(self):
self.name = "张三"
self.age = 33
def eat(self):
print("在吃饭")
per = Person()
setattr(per,"name","李四")
setattr(per,"age","22")
print(per.name)
print(per.age)
还可以将类属性修改为一个类方法,同样也可以将类方法修改成一个类属性:
# 外部函数
def eat(self):
print("在吃饭")
class Person:
def __init__(self):
self.name = "张三"
self.age = 33
per = Person()
# 通过修改 name 属性的值为 eat(这是一个外部定义的函数),原来的 name 属性就变成了一个 name() 方法
setattr(per,"name",eat)
per.name(per)
使用 setattr() 函数对实例对象中执行名称的属性或方法进行修改时,如果该名称查找失败,Python 解释器不会报错,而是会给该实例对象动态添加一个指定名称的属性或方法
def say(self):
print("我正在学Python")
class CLanguage:
pass
clangs = CLanguage()
setattr(clangs,"name","C语言")
setattr(clangs,"say",say)
print(clangs.name)
clangs.say(clangs)
虽然 CLanguage 为空类,但通过 setattr() 函数,我们为 clangs 对象动态添加了一个 name 属性和一个 say() 方法