Python中hasattr、getattr、setattr的区别

hasattr getattr setattr

hasattr

  • 判断该类或对象是否有属性值,有返回True,否则False
class Demo():
    name="laowang" # 类属性
    def __init__(self):
        self.age=18 #实例属性
    def func(self):
        return "demo类的方法func()"

ret = hasattr(Demo, "name")
print(ret) # True
ret1 = hasattr(Demo,"func")
print(ret1)# True
demo=Demo()
ret2 = hasattr(demo, "age")
print(ret2) # True
ret3 = hasattr(demo, "name")
print(ret3) # True
print(demo.name) # 实例对象可以访问类属性。
print(demo.age) # 18

getattr

  • 获取类或对象的属性或者方法
class Demo(object):
    bar=1
    def func(self):
        return "尼古拉斯赵四"

a=Demo()
a_value=getattr(a,"bar") # 获取实例的属性值,第一个参数是实例,第二个是字符串
print(a_value)
a_func=getattr(a,"func")()# 调用,返回尼古拉斯赵四
print(a_func)
d_func =getattr(Demo,"func")("self") # 类调实例方法,要声明一下self
# try:
#     b_value = getattr(a,"bar1")# 获取bar1不存在,报错
#     print(b_value)
#
# except Exception as e:
#     print(e)
#
# finally:
#     c_value = getattr(a, "bar2", "88888")
#     print(c_value)  # 获取属性bar2 的值,但是有默认值

setattr 设置类或属性的值,


class Demo():
    name="尼古拉斯赵四"
    def __init__(self):
        self.age =1000
    def func(self):
        return "good luck"


setattr(Demo,"name","人在塔在")
print(Demo.name)
ret = getattr(Demo,"name")
print(ret)
demo=Demo()
setattr(demo,"height",180)
height = demo.height
print(height)

猜你喜欢

转载自blog.csdn.net/weixin_44224529/article/details/89047958