框架设计使用' self'简单函数的参数(不是类方法)

时间:2014-07-11 13:09:48

标签: python framework-design

我有一个框架(由程序员设计,被认为是我们组织中最有经验的人),它拥有我见过的最奇怪的结构。该框架有很多API,都具有相同的结构:

  • 每个API(函数)都有一个'self'参数,虽然它是一个简单的函数(不是类方法)
  • 这个'self'参数被添加到装饰器@incself中,实际上是对函数本身的引用
  • 在每个函数内部,所有参数都被转换为'self'对象的属性(=函数的属性)
  • 然后,在整个功能代码中,参数以self.arg1,self.arg2,...等形式使用。

因为显然我是唯一认为这很奇怪的人,请帮助我。您是否有人使用/看过类似的方法,它可能带来哪些好处?

from functools import wraps

def incself(func):
    @wraps(func)
    def wrapper(*args, **kwds):
        return func(func, *args, **kwds)
    return wrapper

@incself
def apiFunc01(self, **kwargs):
    for key, value in kwargs.items():
        setattr(self, key, value)
    #....
    print('Connect to IP={0}, port={1}'.format(self.ip, self.port))
    #....

if __name__ == '__main__':
    # the API is called without the 'self' argument!!
    apiFunc01(ip='2.3.4.5', port=2345)

谢谢!

1 个答案:

答案 0 :(得分:0)

这是一种提醒最后一次召唤的方法:

>>>apiFunc01(ip='a', port=123)
Connect to IP=a, port=123

>>>apiFunc01()
Connect to IP=a, port=123

>>>apiFunc01(ip='2.3.4.5', port=123)
Connect to IP=2.3.4.5, port=123

>>>apiFunc01()
Connect to IP=2.3.4.5, port=123