我在工作中有一个框架(由被认为是我们组织中最有经验的程序员设计),它的结构是我见过的最奇怪的。该框架有很多 API,都具有相同的结构:
- 每个 API(函数)都有一个“自我”参数,尽管它是一个简单的函数(不是类方法)
- 这个'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)
谢谢!