Discuss / Python / 试一下

试一下

Topic source
#廖雪峰教程[面向对象高级编程]_定制类[2]
#实现一个定制类,便于链式调用
class chain(object):
    def __init__(self,path=''):
        self.path=path

    def __str__(self):#调用print()打印path
        return self.path

    def __call__(self, path):#当对实例进行调用a("xxx")时将path连接并返回一个新的实例
        return chain('%s/%s' % (self.path,path))

    def __getattr__(self, item):#当写下a.xxx时会将xxx添加到path中,并返回一个新的类
        return chain('%s/%s' % (self.path,item))
    __repr__ = __str__

在控制台输入以下代码:

>>>a=chain()
>>>a.users('michael').repos('ganma')

输出:

/users/michael/repos/ganma

原理: 其实原理很简单,无论是a.users还是a('users'),都是将字符与a本身的path连接,然后返回一个新的类。 然后因为我们写了__repr__ = __str__,所以最后的一个类会自动打印。


  • 1

Reply