V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
whx20202
V2EX  ›  问与答

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

  •  
  •   whx20202 · 2017-06-17 19:22:18 +08:00 · 1642 次点击
    这是一个创建于 2750 天前的主题,其中的信息可能已经有所发展或是发生改变。

    为什么我用 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)

    有人知道为什么么?

    5 条回复    2017-06-19 08:27:32 +08:00
    kier
        1
    kier  
       2017-06-17 21:12:30 +08:00   ❤️ 1
    你会用:self.before_response(self, session=session)
    还是用:self.before_response(session=session)
    honmaple
        2
    honmaple  
       2017-06-17 21:19:09 +08:00
    其实我不太明白 before = getattr(self, "before_response") 中的 self 是怎么来的
    lrxiao
        3
    lrxiao  
       2017-06-17 21:56:49 +08:00
    getattr(x, y) = x.y
    whx20202
        4
    whx20202  
    OP
       2017-06-19 08:27:01 +08:00
    @honmaple 那个是在类方法定义上,加了装饰器标志,所以类方法不是有 self 吗,就作为参数传进来了
    whx20202
        5
    whx20202  
    OP
       2017-06-19 08:27:32 +08:00
    @kier 好像有一点明白了,难道从 self 里面获取的函数,自己已经自带 self 了是吧?
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1183 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 18:25 · PVG 02:25 · LAX 10:25 · JFK 13:25
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.