python之路:始解

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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之路:始解的主要内容,如果未能解决你的问题,请参考以下文章

《Python学习之路 -- Python基础之切片》

[原创]java WEB学习笔记61:Struts2学习之路--通用标签 property,uri,param,set,push,if-else,itertor,sort,date,a标签等(代码片段

python成长之路第三篇_正则表达式

python成长之路第三篇_正则表达式

机器学习之路: python 实践 word2vec 词向量技术

常用python日期日志获取内容循环的代码片段