python Class:面向对象高级编程 __getattr__
admin
2023-07-23 21:42:43
0

官网解释:

  • object.__getattr__(selfname)

  • Called when an attribute lookup has not found the attribute in the usual places (i.e. it is not an instance attribute nor is it found in the class tree for self). name is the attribute name. This method should return the (computed) attribute value or raise an AttributeError exception.


当我们想调用Class中某些东西,而Class中没有,解释器铁定报错,停止运行,那有人就想了:真麻烦,每次都要重新执行一遍,如果当我调用错了内容,程序能把我这个错误当默认程序执行,而不停止我程序运行就好了。so,为了解决这类问题,就出来了__getattr__这个函数了。

我猜的,因为解决程序困难也是一种需求。 


看没有__getattr的出错调用:

#!/usr/bin/python

# -*- coding: utf-8 -*-


class Student(object):

    def __init__(self):

        self.name = 'Michael'


s = Student()

print s.name

print s.score      #Class中没有这个属性

python Class:面向对象高级编程 __getattr__

look, 第一个print正常执行,第二个由于Class中没有这个属性,所以就报错了。


再看,带__getattr__的Class:

#!/usr/bin/python

# -*- coding: utf-8 -*-


class Student(object):

    def __init__(self):

        self.name = 'Michael'


    def __getattr__(self, other):

        if other=='score':

            return 99

            

s = Student()

print s.name

python Class:面向对象高级编程 __getattr__

print s.score   #Class中没有这个属性

python Class:面向对象高级编程 __getattr__

print s.gg       #Class中没有这个属性

python Class:面向对象高级编程 __getattr__


look again, print 的score 和 gg 在Class中都没有定义,但都有输出。因为程序往__getattr__中找,刚刚好定义了一个字符判断 if other=='score':, 所以输出了99 ,而gg一个字都没提,就默认输出None了。是不是感觉以后码程序的时候再也不用担心程序停止运行了。



※发现的强大的链式调用写法:

class Chain(object):

    def __init__(self, path=''):
        self._path = path
    def __getattr__(self, path):
        return Chain('%s/%s' % (self._path, path))   #调用自己
    def __str__(self):
        return self._path

    __repr__ = __str__
    
f = Chain()
print (f.www.anc.do.glob)

结果:

/www/anc/do/glob


相关内容

热门资讯

念念不忘“未获支持”,特朗普又... 【环球网报道 记者 闫珮云】综合美国《纽约邮报》、俄罗斯卫星通讯社、土耳其阿纳多卢通讯社等媒体报道,...
立陶宛叫停与台当局合作,此前疯... 曾经冲在“反华”最前线的立陶宛,如今态度似乎发生变化。立陶宛外交部22日证实,叫停了与台湾当局的合作...
李四川推敬老卡现金化争老年选票 据凤凰卫视报道,台湾年底县市长选举,竞争最为激烈的新北市蓝绿选情胶着。国民党新北市长参选人李四川勤跑...
央视网评:在“人均985”的“... 这两天,全国各省高考分数陆续公布。新闻里、热搜榜再次被高分学霸淡定查分视频或“700+”喜报霸屏霸榜...
鲁比奥:伊朗收费若成先例,将像... 据美国哥伦比亚广播公司(CBS)援引法新社报道,美国国务卿鲁比奥周四警告称,如果允许伊朗对通过霍尔木...
恐慌之下,有妈妈把纸尿裤塞进了... 6月22日下午两点,济南蝉声轰鸣。山东省第一医科大学附属省立医院门诊大厅里,人流如常。“我不回答。”...
凤凰连线在委华人:委内瑞拉首都... 在委内瑞拉连续强震之后,当地有大量房屋倒塌或受损,而首都加拉加斯的民众也都从建筑物中撤离,在户外避险...
1198.79亿元!宇通客车连... 6月24日,世界品牌实验室发布2026年《中国500最具价值品牌》榜单,宇通客车以1198.79亿元...
活力中国调研行|数据多跑路,居... 【大河财立方 记者 夏晨翔 洪昊旸 雄安新区报道】 儿童活动区里,家长正带着孩子嬉戏玩耍;图书馆里,...
公安部公布4起非法占用农用地典... 6月25日,公安部公布4起非法占用农用地典型案例,旨在依法严厉打击非法占用农用地犯罪,全力守护国家粮...