python元编程中一些处理属性的特殊方法

在用户自己定义的类中,下述特殊方法用于获取、设置、删除和列出属性
使用点号,或者内置的的getattr,hasattr, setattr函数存取属性都会触发下述列表中的特殊方法。但是,直接通过实例的__dict__属性来存取方法不会触发这些特殊方法。所以,如果需要,在一些情况下,可以使用这种方法跳过特殊方法。
示例,假设有个名为 Class 的类,obj 是 Class 类的实例,attr 是 obj 的属性。
obj.attr 和 getattr(obj, 'attr', 42)都会触发Class.__getattribute__(obj, 'attr')方法。尝试获取指定属性时总会调用这个方法,不过,寻找的属性时特殊属性或者特殊方法时除外。
del obj.attr 语句会触发Class.__delattr__(obj, 'attr')方法。
dir(obj)语句会触发Class.__dir__(obj)方法。
仅当获取指定的属性失败,搜索过 obj、Class 和超类之后调用Class.__getattr__(self, name)
尝试设置指定的属性时总会调用Class.__setattr__(obj, 'attr', value),点号和setattr(obj, 'attr', 42)会调用这个方法。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 1、什么叫魔法方法? 魔法方法:Python解释器自动给出默认的,是可以给你的类增加魔力的特殊方法。如果你的对象实...
    Bling_ll阅读 4,731评论 0 2
  • __dict__ Python 中,一切皆对象 不管是类还是实例的属性和方法,都符合 object.attribu...
    丘山Ivan阅读 5,378评论 0 0
  • pyton review 学习指南 https://www.zhihu.com/question/29138020...
    孙小二wuk阅读 4,716评论 0 2
  • 郭相麟 月亮之夜 升起一轮心月 生命的轮回 在转瞬之间 快乐与悲伤 快速的跌宕起伏 那一轮心月的升起 遥望那生命的...
    郭相麟阅读 858评论 0 0
  • 从前,有一只叫青青的小兔子。他已经七岁了,人们只知道他很调皮,却不知道他还非常没有礼貌。直到那天。兔妈妈和兔爸爸领...
    薇薇成长小屋阅读 1,404评论 0 1