zoukankan      html  css  js  c++  java
  • python之路:始解(三)

    此章涉及到的是反射机制

    反射主要涉及到以下方法:

      hasattr、getattr、setattr、delattr

    首先说明他们的作用:

      hasattr是用来判断在指定范围内是否存在指定内容的方法

      getattr是用来从指定范围内取出指定内容的方法

      setattr是用来设置指定范围内指定内容的值的方法

      delattr是用来从指定范围内删除指定内容的方法

    将这四者串起来的话,首先要从hasattr说起。

      比如:

    class Person():
        def __init__(self,name,age,gender):
            self.name=name
            self.age=age
            self.gender=gender
        def talk(self):
            print("%s is talking"%self.name)
    
    
    d=Person("liu",26,"male")
    select=input("请输入要执行的函数:")
    if hasattr(d,select)==True:
        print("此类存在")
    else:
        print("此类不存在")

      输入talk,则会返回此类存在。

      输入其他值,则会返回此类不存在

    用了hasattr判断完对象是否存在之后,我们就可以使用getattr取出该对象,如果该对象是个方法的话,那么就可以直接运行此方法,如果该对象是个参数的话,那么我们就可以直接得到该值。

    class Person():
        def __init__(self,name,age,gender):
            self.name=name
            self.age=age
            self.gender=gender
        def talk(self):
            print("%s is talking"%self.name)
    
    
    d=Person("liu",26,"male")
    select=input("请输入要执行的函数:")
    if hasattr(d,select)==True:
       getattr(d,select)()
    else:
        print("此类不存在")

    输出的结果为:

    在用getattr找到指定内容后,可能还会涉及到更改其值。如果真的需要更改值,那么就需要到了setattr这个函数。

    class Person():
        def __init__(self,name,age,gender):
            self.name=name
            self.age=age
            self.gender=gender
        def talk(self):
            print("%s is talking"%self.name)
    
    
    d=Person("liu",26,"male")
    
    
    
    d.talk()
    select=input("请输入要执行的函数:")
    if hasattr(d,select)==True:
       setattr(d,"name","zhao")
       getattr(d,select)()
    else:
        print("此类不存在")

    运行该函数可以得到以下结果:

    最后如果想要删除某些内容,可以调用delattr来进行相关内容的删除。

    class Person():
        def __init__(self,name,age,gender):
            self.name=name
            self.age=age
            self.gender=gender
        def talk(self):
            print("%s is talking"%self.name)
    
    
    d=Person("liu",26,"male")
    d.talk()
    # delattr(d,"age")
    d.talk()
    print(d.age)
    # delattr(d,"name")
    d.talk()

    按照以上代码运行,最终结果为:

    若将注释掉的代码回复,则结果变为:

    可以对其进行异常处理:

    d=Person("liu",26,"male")
    d.talk()
    delattr(d,"age")
    d.talk()
    if hasattr(d,"age")==True:
        print(d.age)
    else:
        print("age被删除")
    delattr(d,"name")
    if hasattr(d,"name"):
        d.talk()
    else:
        print("name被删除")

    结果就不会涉及报错了:

  • 相关阅读:
    flink-sql-client使用kafka表格
    flink 使用sql实现kafka生产者和消费者
    利用scan迁移部分单点redis数据到RedisCluster
    flink按事件时间排序
    Linux下面 多线程死锁问题的调试
    大数据开发工具漫谈
    如何撰写一个分布式计算平台的作业调度器?
    (随用随总结)Linux下面的特殊权限&不同的文件类型
    【javascript小案例】从0开始实现一个俄罗斯方块
    mysqldumpslow简单使用方法-mysqldumpslow详细用法
  • 原文地址:https://www.cnblogs.com/mstzkot/p/7483824.html
Copyright © 2011-2022 走看看