我应该装饰一个函数吗?

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

试图确定我是否应该尝试使用装饰器或其他一些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()函数按名称引用对象属性.

作者: dawei

【声明】:永州站长网内容转载自互联网,其相关言论仅代表作者个人观点绝非权威,不代表本站立场。如您发现内容存在版权问题,请提交相关链接至邮箱:bqsm@foxmail.com,我们将及时予以处理。

为您推荐

联系我们

联系我们

0577-28828765

在线咨询: QQ交谈

邮箱: xwei067@foxmail.com

工作时间:周一至周五,9:00-17:30,节假日休息

返回顶部