python getattr setattr_python 内建函数setattr() getattr()

setattr(object,name,value):

作用:设置object的名称为name(type:string)的属性的属性值为value,属性name可以是已存在属性也可以是新属性。

getattr(object,name,default):

作用:返回object的名称为name的属性的属性值,如果属性name存在,则直接返回其属性值;如果属性name不存在,则触发AttribetError异常或当可选参数default定义时返回default值。

>>> class attribute():

... def __init__(self):

... self.attribute_1='i am attribute 1'

... self.attribute_2='i am attribute 2'

...

>>> result=attribute()

>>> dir(result)

['__doc__', '__init__', '__module__', 'attribute_1', 'attribute_2']

>>> getattr(result,'attribute_1')

'i am attribute 1'

>>> getattr(result,'attribute_3')

Traceback (most recent call last):

File "", line 1, in

AttributeError: attribute instance has no attribute 'attribute_3'

>>> getattr(result,'attribute_3','i am attribute 3')

'i am attribute 3'

>>> dir(result)

['__doc__', '__init__', '__module__', 'attribute_1', 'attribute_2']

>>> getattr(result,'attribute_2')

'i am attribute 2'

>>> setattr(result,'attribute_2','i am changed')

>>> getattr(result,'attribute_2')

'i am changed'

>>> setattr(result,'attribute_4','i am new one')

>>> dir(result)

['__doc__', '__init__', '__module__', 'attribute_1', 'attribute_2', 'attribute_4']

和__getattribute__函数是什么?它们的作用是什么? __getattr__是Python中的一个特殊方法,用于在访问一个不存在的属性时触发。当我们尝试访问一个对象的属性,而该属性不存在时,Python会调用__getattr__方法来处理这个请求。可以在__getattr__方法中自定义对不存在属性的处理逻辑,比如返回默认值或抛出异常。 __setattr__是Python中的另一个特殊方法,用于在给对象的属性赋值时触发。当我们对一个对象的属性进行赋值时,Python会调用__setattr__方法来处理这个赋值操作。可以在__setattr__方法中自定义对属性赋值的行为,比如进行一些额外的操作或进行属性值的验证。需要注意的是,在__setattr__方法中对属性进行赋值时,应该调用父类的__setattr__方法来避免引起无限递归。 __getattribute__是Python中的另一个特殊方法,用于获取对象的属性值。当我们尝试获取一个对象的属性时,不论这个属性是否存在,Python都会调用__getattribute__方法来处理这个请求。可以在__getattribute__方法中自定义对属性的获取行为,比如进行一些额外的操作或返回特定的属性值。需要注意的是,在__getattribute__方法内部访问属性时,应该使用super().__getattribute__方法来避免引起无限递归。 总结一下: - __getattr__用于处理访问不存在属性的情况,可以自定义对不存在属性的处理逻辑。 - __setattr__用于处理属性赋值的情况,可以自定义对属性赋值的行为。 - __getattribute__用于获取属性的值,可以自定义对属性获取的行为。 参考资料: 属性相关:__getattr__函数、__setattr__函数、__getattribute__函数、__setattribute__函数和__dir__函数: - 知乎 (zhihu.com) 引用中的代码示例。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值