您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

我应该装饰一个函数吗?

5b51 2022/1/14 8:23:35 python 字数 6796 阅读 620 来源 www.jb51.cc/python

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

总结

以上是编程之家为你收集整理的我应该装饰一个函数吗?全部内容,希望文章能够帮你解决我应该装饰一个函数吗?所遇到的程序开发问题。


如果您也喜欢它,动动您的小指点个赞吧

除非注明,文章均由 laddyq.com 整理发布,欢迎转载。

转载请注明:
链接:http://laddyq.com
来源:laddyq.com
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。


联系我
置顶