试图确定我是否应该尝试使用装饰器或其他一些 Pythonic 方式来减少我的许多函数正在执行的代码。我希望这些函数能够在每个函数的开头调用另一个函数,或者以某种方式“装饰”每个函数的开头。我以前从未使用过装饰器,并且正在努力以 pythonic 方式实现这个装饰想法,以减少每个函数的通用共享代码集。
我有许多函数将在函数开始时执行相同的一组步骤。然而,公共(public)代码存在一些结构问题,这使得这个“装饰器”的想法变得困难:
这些函数都在父类的子类中。
函数之间的常用命令引用变量名 特定于函数(但函数的子集 姓名)。
常用命令需要返回给调用者,不执行任何 如果满足特定条件,则更多子函数。 (示例代码中的“if jobj :” block )
对于变量/属性示例,子函数 get_nas_server(self) 将利用通用代码集中的“nas_server”变量变体。从函数名称中减去 get_ 可以揭示要在通用代码集中使用的变量名称的基数。来自“get_nas_server”函数名称的示例变量名称和对象属性:
NAS_服务器
nas_server.json
self.nas_server(属性)
这是其中一个函数的通用代码:
####################################################################
def get_nas_server(self):
####################################################################
"""\nGets COMMAND nas_server and places data into self.nas_server"""
try:
self.nas_server
return self.nas_server
except AttributeError:
pass
self.get_file_cmd('nas_server')
jobj = self.fresh_json('nas_server.json')
if jobj :
self.nas_server = jobj
return self.nas_server
self.get_file_cmd('get_nas_server')
函数中上面代码下面的所有内容都是特定于函数目的的,不适合在这里讨论。基本上,我试图让上面的所有代码都可以在我的函数中重用,但代码必须根据函数名称更改变量和属性。
感谢阅读到这里,感谢所有帮助。
最佳答案
似乎您可以在父类中将其定义为辅助方法:
class Parent(object):
def _get_something(name):
try:
return getattr(self, name)
except AttributeError:
pass
self.get_file_cmd(name)
jobj = self.fresh_json(name+'.json')
if jobj :
setattr(self, name, jobj)
return jobj
self.get_file_cmd('get_'+name)
关于python - 我应该装饰一个函数吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32038947/