我应该装饰一个函数吗?

前端之家收集整理的这篇文章主要介绍了我应该装饰一个函数吗?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

试图确定我是否应该尝试使用装饰器或其他一些Pythonic方法来减少我的许多功能所做的代码.我希望这些函数能够在每个函数的开头调用可能的另一个函数,或以某种方式“装饰”每个函数的开头.我之前从未使用过装饰器,并且正在努力以pythonic方式实现这种装饰思想,以减少每个函数的共同代码集.

我有很多函数会在函数开始时执行相同的一组步骤.但是,公共代码存在一些结构问题,这使得这个“装饰”想法变得困难:

>这些函数都在父类的子类中.
>函数之间的通用命令引用变量名称
特定于函数函数(但函数的子集
名称).
>常用命令需要返回调用者而不执行任何调用
如果满足某个条件,则更多的子功能. (“如果jobj:”示例代码中的块)

对于变量/属性示例,子函数get_nas_server(self)将在公共代码集中使用“nas_server”变量变量.从函数名中减去get_会显示要在公共代码集中使用的变量名的基础.从“get_nas_server”函数名派生的示例变量名称和对象属性

nas_server
nas_server.json
self.nas_server(属性)

以下是其中一个函数的公共代码

  1. ####################################################################
  2. def get_nas_server(self):
  3. ####################################################################
  4. """\nGets COMMAND nas_server and places data into self.nas_server"""
  5. try:
  6. self.nas_server
  7. return self.nas_server
  8. except AttributeError:
  9. pass
  10. self.get_file_cmd('nas_server')
  11. jobj = self.fresh_json('nas_server.json')
  12. if jobj :
  13. self.nas_server = jobj
  14. return self.nas_server
  15. self.get_file_cmd('get_nas_server')

函数中上面代码以下的所有内容都是特定于功能目的,不适合在此讨论.基本上我试图让所有代码在我的函数中重复使用,但代码必须根据函数名称更改变量和属性.

感谢阅读,如果你有这么远,感谢所有的帮助.

最佳答案
看起来像你可以在父类中定义为辅助方法的东西:

  1. class Parent(object):
  2. def _get_something(name):
  3. try:
  4. return getattr(self,name)
  5. except AttributeError:
  6. pass
  7. self.get_file_cmd(name)
  8. jobj = self.fresh_json(name+'.json')
  9. if jobj :
  10. setattr(self,name,jobj)
  11. return jobj
  12. self.get_file_cmd('get_'+name)

如此片段演示,您可以使用getattr(),setattr()hasattr()函数名称引用对象属性.

猜你在找的Python相关文章