码迷,mamicode.com
首页 > 其他好文 > 详细

__getattr__

时间:2017-04-29 20:01:45      阅读:236      评论:0      收藏:0      [点我收藏+]

标签:解释   pytho   __str__   span   ret   line   getattr   status   pat   

当调用不存在的属性时,比如score,Python解释器会试图调用__getattr__(self, ‘score‘)来尝试获得属性,这样,
我们就有机会返回score的值:

class Student(object):
   def __init__(self):
       self.name = Michael
   def __getattr__(self, attr):
      if attr==score:
         return 99

当调用不存在的属性时,比如score,Python解释器会试图调用__getattr__(self, ‘score‘)来尝试获得属性,这样,
我们就有机会返回score的值:

>>> s = Student()
>>> s.name
Michael
>>> s.score
99

返回函数也是完全可以的:

class Student(object):
def __getattr__(self, attr):
if attr==age:
return lambda: 25

利用完全动态的__getattr__,我们可以写出一个链式调用:

 

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__
>>> Chain().status.user.timeline.list
/status/user/timeline/list

 

__getattr__

标签:解释   pytho   __str__   span   ret   line   getattr   status   pat   

原文地址:http://www.cnblogs.com/dynas/p/6785799.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!