欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

Python中的getattr,__getattr__,__getattribute__和__get__详解

程序员文章站 2022-06-19 13:28:33
目录getattr__getattr__getattributeget总结getattrgetattr(object, name[, default])是python的内置函数之一,它的作用是获取对象...

getattr

getattr(object, name[, default])是python的内置函数之一,它的作用是获取对象的属性。

示例

>>> class foo:
...     def __init__(self, x):
...         self.x = x
...
>>> f = foo(10)
>>> getattr(f, 'x')
10
>>> f.x
10
>>> getattr(f, 'y', 'bar')
'bar'

__getattr__

object.__getattr__(self, name)是一个对象方法,当找不到对象的属性时会调用这个方法。

示例

>>> class frob:
...     def __init__(self, bamf):
...         self.bamf = bamf
...     def __getattr__(self, name):
...         return 'frob does not have `{}` attribute.'.format(str(name))
...
>>> f = frob("bamf")
>>> f.bar
'frob does not have `bar` attribute.'
>>> f.bamf
'bamf'

getattribute

object.__getattribute__(self, name)是一个对象方法,当访问某个对象的属性时,会无条件的调用这个方法。该方法应该返回属性值或者抛出attributeerror异常。

示例

>>> class frob(object):
...     def __getattribute__(self, name):
...         print "getting `{}`".format(str(name))
...         return object.__getattribute__(self, name)
...
>>> f = frob()
>>> f.bamf = 10
>>> f.bamf
getting `bamf`
10

get

__get__()方法是描述器方法之一。描述器用于将访问对象属性转变成调用描述器方法。

示例

>>> class descriptor(object):
...     def __get__(self, obj, objtype):
...         print("get value={}".format(self.val))
...         return self.val
...     def __set__(self, obj, val):
...         print("set value={}".format(val))
...         self.val = val
...
>>> class student(object):
...     age = descriptor()
...
>>> s = student()
>>> s.age = 12
set value=12
>>> print(s.age)
get value=12
12

总结

本篇文章就到这里了,希望能够给你带来帮助,也希望您能够多多关注的更多内容!