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被删除")

    结果就不会涉及报错了:

  • 相关阅读:
    在Android Studio中用Gradle添加Robolectric
    Windows环境下利用github快速配置git环境
    上传Android代码到Jcenter(解决了字符映射的问题)
    RecyclerView和ScrollView嵌套使用
    Android Java类编写规范+优化建议
    3.0之后在LinearLayout里增加分割线
    【转】Android Studio中通过快捷键来提取提取方法
    为什么Android应该根据屏幕分辨率来加载不同的图片文件
    JSON/XML格式化插件比较
    利用在线工具根据JSon数据自动生成对应的Java实体类
  • 原文地址:https://www.cnblogs.com/mstzkot/p/7483824.html
Copyright © 2011-2022 走看看