试图确定我是否应该尝试使用装饰器或其他一些Pythonic方法来减少我的许多功能所做的代码.我希望这些函数能够在每个函数的开头调用可能的另一个函数,或以某种方式“装饰”每个函数的开头.我之前从未使用过装饰器,并且正在努力以pythonic方式实现这种装饰思想,以减少每个函数的共同代码集.
我有很多函数会在函数开始时执行相同的一组步骤.但是,公共代码存在一些结构问题,这使得这个“装饰”想法变得困难:
>这些函数都在父类的子类中.
>函数之间的通用命令引用变量名称
特定于函数的函数(但函数的子集
名称).
>常用命令需要返回调用者而不执行任何调用
如果满足某个条件,则更多的子功能. (“如果jobj:”示例代码中的块)
对于变量/属性示例,子函数get_nas_server(self)将在公共代码集中使用“nas_server”变量变量.从函数名中减去get_会显示要在公共代码集中使用的变量名的基础.从“get_nas_server”函数名派生的示例变量名称和对象属性:
nas_server
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)
如此片段演示,您可以使用getattr()
,setattr()
和hasattr()
函数按名称引用对象属性.