• 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
  • 相关阅读:
    重学Java 面向对象 之 final
    java并发学习04---Future模式
    java并发学习03---CountDownLatch 和 CyclicBarrier
    java并发学习02---ReadWriteLock 读写锁
    java并发学习01 --- Reentrantlock 和 Condition
    链表的倒数第k个节点
    重建二叉树
    java并发学习--线程池(一)
    二叉树的深度
    vue-常用指令(v-for)
  • 原文地址:https://www.cnblogs.com/XhyTechnologyShare/p/14052108.html
Copyright © 2020-2023  润新知