python之路:始解(三)

本文详细介绍了Python中的反射机制,包括hasattr、getattr、setattr、delattr等方法的应用,并通过实例展示了如何判断对象是否存在、获取对象内容、修改对象值以及删除对象。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

此章涉及到的是反射机制

 

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

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

结果就不会涉及报错了:

 

转载于:https://www.cnblogs.com/mstzkot/p/7483824.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值