getattr 获取到的函数,在调用的时候,自动加 self 吗?

2017-06-17 19:22:18 +08:00
 whx20202

为什么我用 getattr 反射的方式,获得了 before 这个函数的句柄,然后调用总是说我参数不对?

要么就说 session 这个参数传进去两次,要么就说 before 这个方法需要 2 个参数,我传了 3 个

@staticmethod
def manage_rest_api():
    def decorator(func):
            session = http_session()
            before = getattr(self, "before_response")
            before(self, session=session)
            
            rst = func(self)
            return rst
        return wrapper
    return decorator

def before(self, session=None):
   pass

说白了就是这一行:before(self, session=session),感觉我写成这样就行了 before(session=session)

有人知道为什么么?

1620 次点击
所在节点    问与答
5 条回复
kier
2017-06-17 21:12:30 +08:00
你会用:self.before_response(self, session=session)
还是用:self.before_response(session=session)
honmaple
2017-06-17 21:19:09 +08:00
其实我不太明白 before = getattr(self, "before_response") 中的 self 是怎么来的
lrxiao
2017-06-17 21:56:49 +08:00
getattr(x, y) = x.y
whx20202
2017-06-19 08:27:01 +08:00
@honmaple 那个是在类方法定义上,加了装饰器标志,所以类方法不是有 self 吗,就作为参数传进来了
whx20202
2017-06-19 08:27:32 +08:00
@kier 好像有一点明白了,难道从 self 里面获取的函数,自己已经自带 self 了是吧?

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/369162

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX