2007年06月22日 星期五 12:03
ÎÒÏÖÔÚÒòΪÐèÒªÉè¼ÆÒ»¸öÀ࣬ÆäÖÐ __getattr__ ¿ÉÄÜÐèÒªÖØÔØ£¬µ«ÖØÔغóÎÒ·¢ÏÖ __repr__ ±»Ó°ÏìÁË¡£ÕâÀïÊÇÒ»¸ö¼òµ¥µÄÄ£ÐÍ£º #!/usr/bin/env python class test: def __init__(self): self.x = 1 def __getattr__(self, attr_name): try: return self.__dict__[attr_name] except KeyError: self.__dict__[attr_name] = 'inexistent' return self.__dict__[attr_name] t = test() print t.x print t.y print type(t) T = t print T.x print t µ½Ä¿Ç°ÎªÖ®£¬ÎÒÈÔȻϣÍû "print t" Äܹ»·µ»Ø ""£¬µ«ÊÇÔËÐнá¹ûÈ´ÊÇ£º sh$ python test.py 1 inexistent 1 Traceback (most recent call last): File "testtree.py", line 23, in ? print t TypeError: 'str' object is not callable ÎÒÒ²³¢ÊÔÁËÖØÔØ __repr__£¬µ«Òì³£ÒÀ¾É£º #!/usr/bin/env python class test: def __init__(self): self.x = 1 def __getattr__(self, attr_name): try: return self.__dict__[attr_name] except KeyError: self.__dict__[attr_name] = 'inexistent' return self.__dict__[attr_name] def __repr__(self): return 'test.__repr__' t = test() print t.x print t.y print type(t) T = t print T.x print t But the result remains: Traceback (most recent call last): File "testtree.py", line 23, in ? print t TypeError: 'str' object is not callable ÄÇôÔÒòºÎÔÚÄØ£¿ лл¡£ -------------- 下一部分 -------------- Ò»¸öHTML¸½¼þ±»ÒƳý... URL: http://python.cn/pipermail/python-chinese/attachments/20070622/2cc38d20/attachment.html
2007年06月22日 星期五 14:25
ÄãÕâÖÖÇé¿öÒªÖØÔØ__str__ #!/usr/bin/env python class test: def __init__(self): self.x = 1 def __getattr__(self, attr_name): try: return self.__dict__[attr_name] except KeyError: self.__dict__[attr_name] = 'inexistent' return self.__dict__[attr_name] def __str__(self): return 'test.__str__' if __name__ == '__main__': t = test() print t.x print t.y print type(t) T = t print T.x print t >>> 1 inexistent1 test.__str__ >>> -----Original Message----- From: python-chinese-bounces在lists.python.cn [mailto:python-chinese-bounces在lists.python.cn]On Behalf Of Roc Zhou Sent: Friday, June 22, 2007 12:04 PM To: python-chinese在lists.python.cn Subject: [python-chinese] why __repr__ affected after __getattr__ overloaded? ÎÒÏÖÔÚÒòΪÐèÒªÉè¼ÆÒ»¸öÀ࣬ÆäÖÐ __getattr__ ¿ÉÄÜÐèÒªÖØÔØ£¬µ«ÖØÔغóÎÒ·¢ÏÖ __repr__ ±»Ó°ÏìÁË¡£ÕâÀïÊÇÒ»¸ö¼òµ¥µÄÄ£ÐÍ£º #!/usr/bin/env python class test: def __init__(self): self.x = 1 def __getattr__(self, attr_name): try: return self.__dict__[attr_name] except KeyError: self.__dict__[attr_name] = 'inexistent' return self.__dict__[attr_name] t = test() print t.x print t.y print type(t) T = t print T.x print t µ½Ä¿Ç°ÎªÖ®£¬ÎÒÈÔȻϣÍû "print t" Äܹ»·µ»Ø " "£¬µ«ÊÇÔËÐнá¹ûÈ´ÊÇ£º sh$ python test.py 1 inexistent 1 Traceback (most recent call last): File "testtree.py", line 23, in ? print t TypeError: 'str' object is not callable ÎÒÒ²³¢ÊÔÁËÖØÔØ __repr__£¬µ«Òì³£ÒÀ¾É£º #!/usr/bin/env python class test: def __init__(self): self.x = 1 def __getattr__(self, attr_name): try: return self.__dict__[attr_name] except KeyError: self.__dict__[attr_name] = 'inexistent' return self.__dict__[attr_name] def __repr__(self): return 'test.__repr__' t = test() print t.x print t.y print type(t) T = t print T.x print t But the result remains: Traceback (most recent call last): File "testtree.py", line 23, in ? print t TypeError: 'str' object is not callable ÄÇôÔÒòºÎÔÚÄØ£¿ лл¡£ -------------- 下一部分 -------------- Ò»¸öHTML¸½¼þ±»ÒƳý... URL: http://python.cn/pipermail/python-chinese/attachments/20070622/67f801f8/attachment.html
2007年06月22日 星期五 15:32
лл£¬Õâ¸öÎÊÌâÎÒ¸Õ²ÅŪÃ÷°×ÁË£¬µ«ÊÇÓÖÓÐÁíÍâÒ»¸öÎÊÌâÁË£º >>> class test: ... def __init__(self): ... self.x = 1 ... def __getattr__(self, attr_name): ... print attr_name ... if attr_name == 'y': ... return 2 ... else: ... raise AttributeError, attr_name ... >>> t = test() >>> t.x 1 >>> t.y y 2 >>> print t.x 1 >>> print t __str__ __repr__ <__main__.test instance at 0xb7f6d6cc> __str__ ºÍ __repr__ µÄ attr_name ÒѾ±»´òÓ¡³öÀ´£¬ËµÃ÷ __getattr__ ÔÚ print µÄʱºò±»µ÷ÓÃÁË£¬²¢ÇÒËüÓÖ²»ÊÇ "y"£¬ÎªÊ²Ã´Ã»ÓÐÅ׳ö AttributeError µÄÒì³££¿ On 6/22/07, Liming_Do <Liming_Do在smics.com> wrote: > > ÄãÕâÖÖÇé¿öÒªÖØÔØ__str__ > > #!/usr/bin/env python > > class test: > def __init__(self): > self.x = 1 > def __getattr__(self, attr_name): > try: > return self.__dict__[attr_name] > except KeyError: > self.__dict__[attr_name] = 'inexistent' > return self.__dict__[attr_name] > > def __str__(self): > return 'test.__str__' > > if __name__ == '__main__': > t = test() > print t.x > print t.y > print type(t) > T = t > print T.x > print t > > >>> > 1 > inexistent >> 1 > test.__str__ > >>> > > _______________________________________________ > python-chinese > Post: send python-chinese在lists.python.cn > Subscribe: send subscribe to python-chinese-request在lists.python.cn > Unsubscribe: send unsubscribe to python-chinese-request在lists.python.cn > Detail Info: http://python.cn/mailman/listinfo/python-chinese > -------------- 下一部分 -------------- Ò»¸öHTML¸½¼þ±»ÒƳý... URL: http://python.cn/pipermail/python-chinese/attachments/20070622/040d9c83/attachment.htm
2007年06月22日 星期五 15:44
这应该是print处理了异常。 -- I like python! UliPad <>: http://wiki.woodpecker.org.cn/moin/UliPad My Blog: http://www.donews.net/limodou
2007年06月22日 星期五 16:09
偶觉得似乎不是这个原因 而是这兄弟并未引用一个不存在的成员,哪里会有异常抛出来呢 class test: def __init__(self): self.x = 1 def __getattr__(self, attrname): print attrname if attrname == 'y': return 2 else: raise AttributeError, attrname if __name__=='__main__': t = test() print t.x print t.y print t.z print t >>> 1 y 2 z Traceback (most recent call last): File "D:/LeonDong/StudyStudio/Python/getattr/test2.py", line 15, inprint t.z File "D:/LeonDong/StudyStudio/Python/getattr/test2.py", line 9, in __getattr__ raise AttributeError, attrname AttributeError: z >>> -----Original Message----- From: python-chinese-bounces在lists.python.cn [mailto:python-chinese-bounces在lists.python.cn]On Behalf Of limodou Sent: Friday, June 22, 2007 3:45 PM To: python-chinese在lists.python.cn Subject: Re: [python-chinese] why __repr__ affected after __getattr__overloaded? 这应该是print处理了异常。 -- I like python! UliPad < >: http://wiki.woodpecker.org.cn/moin/UliPad My Blog: http://www.donews.net/limodou _______________________________________________ python-chinese Post: send python-chinese在lists.python.cn Subscribe: send subscribe to python-chinese-request在lists.python.cn Unsubscribe: send unsubscribe to python-chinese-request在lists.python.cn Detail Info: http://python.cn/mailman/listinfo/python-chinese
Zeuux © 2025
京ICP备05028076号