zoukankan      html  css  js  c++  java
  • python的魔法方法

    class F(object):
        def __init__(self):
            self.name = 'A'
        def __getattr__(self, item):
            if item == 'age':
                return 40
            elif item == 'haha':
                return 'good'
            else:
                raise AttributeError('没有这个属性')
        def __getattribute__(self, item):
            print('获取属性,方法', item)
            return object.__getattribute__(self, item)
    f = F()
    print(f.age)
    print(f.haha)
    

      

    获取属性,方法 age   <<<<<print(f.age)时调用getattribute魔法方法
    40                               <<<<<print(f.age)时发现age不是f的属性,则调用getattribute魔法方法
    获取属性,方法 haha 
    good

    此处魔法方法是__getattribute__(self, item)和__getattr__(self, item):

    getattribute (print(ob.name) -- obj.func())当访问对象的属性或者是方法的时候触发

    getattr 拦截运算(obj.xx),对没有定义的属性名和实例,会用属性名作为字符串调用这个方法

  • 相关阅读:
    Python的递归深度问题
    Python之多进程
    Python之多线程
    Git的基本操作
    ref与out区别
    Numpy基本操作
    面向对象中有哪些双下线方法及应用场景
    上下文管理
    Local与LocalStack
    基于列表实现栈
  • 原文地址:https://www.cnblogs.com/vigossr/p/10675234.html
Copyright © 2011-2022 走看看