python中的getattr()、setattr()、hasattr() 函数的使用

python中的getattr()、setattr()、hasattr() 三个函数均是对类属性或方法的操作,其中:getattr()用于获取类或实例中指定方法获取属性的值;setattr()用于设置类或实例中属性或方法;hasattr()用于判断类或实例中是否存在指定的属性或方法;

getattr() 用法详解:

 getattr(object, name, default=None):其中object:接收对象或对象实例;name:接收要获取的属性或方法名;default:如果该类或实例不存在则返回的默认值,如果不传此参数且该类没有要获取的属性或方法时将会抛出AttributeError异常;

 1 class User:
 2     name = ""
 3     age = 0
 4     sex = ""
 5 
 6     def __init__(self,name,age,sex):
 7         self.name = name
 8         self.age = age
 9         self.sex = sex
10 
11 if __name__ == '__main__':
12     user = User("张三",20,"")
13     print(getattr(user, "addr","没有该属性或方法"))  # 输出结果:没有该属性或方法
14     print(getattr(user,"name"))            # 输出结果:张三

setattr() 用法详解:

setattr(x, y, v): 其中:x:表示要设置的类或实例;y:表示要设置的属性或方法;v:表示要设置的属性或方法的值

class User:
    name = ""
    age = 0
    sex = ""

    def __init__(self,name,age,sex):
        self.name = name
        self.age = age
        self.sex = sex

if __name__ == '__main__':
    user = User("张三",20,"")
    # ------------------为user实例设置属性------------------------
    setattr(user,"addr","北京")   # 设置user实例的addr属性值为北京
    print(user.addr)              # 返回结果:北京
    print(getattr(User, "addr","没有该属性或方法")) # 为实例增加属性或方法后,类中国是不存在该属性或方法的
    # -------------------通过lambda为user实例设置方法-------------
    setattr(user,"showInfo",lambda :print("显示用户信息"))
    user.showInfo() # 返回结果:显示用户信息
    # -------------------通过编写函数为user实例设置方法-------------
    def showInfo(name,sex,age):
        print("姓名:"+name,
              "性别:"+sex,
              "年龄:%s"%age
        )

    setattr(user,"showInfo",showInfo)
    user.showInfo(user.name,user.sex,user.age)  # 输出结果为:姓名:张三 性别:男 年龄:20
    # 如果通过setattr设置已存在的属性或方法将会覆盖原来的属性或方法

hasattr() 用法详解:

hasattr(*args, **kwargs):第一个参数传入:类或类实例;第二个参数传入:要判断的属性或方法名;结果返回:True或False

 1 class User:
 2     name = ""
 3     age = 0
 4     sex = ""
 5 
 6     def __init__(self,name,age,sex):
 7         self.name = name
 8         self.age = age
 9         self.sex = sex
10 
11 if __name__ == '__main__':
12     user = User("张三",20,"")
13     print(hasattr(user, "name"))        # 返回结果:True
14     print(hasattr(user, "addr"))        # 返回结果:False

 

posted @ 2020-11-28 12:00  不休不止  阅读(466)  评论(0编辑  收藏  举报