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

    结果就不会涉及报错了:

  • 相关阅读:
    python利用scapy模块写一个TCP路由追踪和扫描存活IP的脚本
    mitm6:通过IPv6攻破IPv4网络
    php写一个判断是否有cookie的脚本
    python写一个DDos脚本(DOS)
    分布式系统设计系列 -- 基本原理及高可用策略(转)
    在Ubuntu 16.04 上编译安装OpenCV3.2.0(Cmake + python3 + OpenCV3)(转)
    好玩的Raft动画演示,原理秒懂
    全球分布式数据库:Google Spanner(论文翻译)
    分布式系统设计系列 -- 基本原理及高可用策略 (转)
    MySQL更新优化(转)
  • 原文地址:https://www.cnblogs.com/mstzkot/p/7483824.html
Copyright © 2011-2022 走看看