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

    结果就不会涉及报错了:

  • 相关阅读:
    Spring boot unable to determine jdbc url from datasouce
    Unable to create initial connections of pool. spring boot mysql
    spring boot MySQL Public Key Retrieval is not allowed
    spring boot no identifier specified for entity
    Establishing SSL connection without server's identity verification is not recommended
    eclipse unable to start within 45 seconds
    Oracle 数据库,远程访问 ora-12541:TNS:无监听程序
    macOS 下安装tomcat
    在macOS 上添加 JAVA_HOME 环境变量
    Maven2: Missing artifact but jars are in place
  • 原文地址:https://www.cnblogs.com/mstzkot/p/7483824.html
Copyright © 2011-2022 走看看