听说你不会python链式调用?快来看看吧

本文探讨如何在Python中使用__getattr__和__call__方法实现链式调用来生成RESTful风格的URL。通过示例展示了如何通过Class.users.list和Class.users(someone).detail生成对应的URL路径,并引发对于对象与函数相似性的思考。
摘要由CSDN通过智能技术生成

问题:

看几个http的rest调用的例子:

  • /users/list
  • /user/{someone}/detail

用python如何实现:

  • Class.users.list生成/users/list
  • Class.users(someone).detail生成/user/{someone}/detail

原理

__getattr__方法

python定制类,可以实现__getattr__(self,*args, **kw)方法,当调用一个类的属性且该属性在类中未定义,会进入该方法,例子如下:

class Test(object):
    name = 'name1'
    
    def __getattr__(self, attr):
        if(attr == 'age'):
            return 11
        
test = Test()
print(test.name)
print(test.age)

该例子输出:
name1 和 11

__call__方法

我们知道实例化一个class后,产生实例s,可以通过s.methodName()这种方式调用类中定义的方法。
在python中,可以通过实现__call__(self,*args,**kw)方法,直接调用实例,类似于s(),,此时s是一个callable对象,可以通过callable(s)进行判断,输出为True。(python中的类为啥开头不是大写呢)

此时对象和函数是一样的(对象和函数可以看做一样的么?)

class T
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值