美文网首页
__getattr__

__getattr__

作者: SingleDiego | 来源:发表于2018-03-26 17:25 被阅读2次

    正常情况下,当我们调用类的方法或属性时,如果不存在,就会报错。

    Python 有一个机制,那就是 __getattr__() 方法,可以动态返回一个属性来处理那些不存在的属性和方法。

    class Student(object):
    
        def __init__(self, name):
            self.name = name
    
        def __getattr__(self, attr):
            if attr == 'score':
                return '暂无分数'
            else:
                return '该属性或方法不存在'
    

    测试:

    >>> bart = Student('bart')
    >>> bart.name
    'bart'
    
    >>> bart.score
    '暂无分数'
    
    >>> bart.age
    '该属性或方法不存在'
    

    __getattr__() 方法返回函数也是完全可以的:

    class Student(object):
    
        def __init__(self, name):
            self.name = name
    
        def __getattr__(self, attr):
            if attr == 'hello':
                return lambda attr : '{}: Hello! {}'.format(self.name, attr)
    

    测试:

    >>> bart = Student('bart')
    >>> bart.hello('sam')
    'bart: Hello! sam'
    

    注意,只有在没有找到属性的情况下,才调用 __getattr__,已有的属性,比如 name,不会在 __getattr__ 中查找。

    __getattr__ 中没有定义时,默认返回 None

    >>> type(bart.abc)
    <class 'NoneType'>
    

    相关文章

      网友评论

          本文标题:__getattr__

          本文链接:https://www.haomeiwen.com/subject/xaurcftx.html