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

python – Method Refactor:从许多kwargs到一个arg-object

5b51 2022/1/14 8:23:48 python 字数 4415 阅读 614 来源 www.jb51.cc/python

有时,方法的kwargs数量会增加到我认为应该重构的水平.例:def foo(important=False, debug=False, dry_run=False, ...): .... sub_foo(important=imporant, debug=debug, dry_run=dry_run, ...) 我目前的首选解决方案clas

概述

有时,方法kwargs数量增加到我认为应该重构的水平.

例:

def foo(important=False,debug=False,dry_run=False,...):
    ....
    sub_foo(important=imporant,debug=debug,dry_run=dry_run,...)

我目前的首选解决方

class Args(object):
    ...

def foo(args):
    sub_foo(args)

一个问题:如何调用Args?有一个众所周知的描述或设计模式?

第二个问题:Python有什么东西可以用作Args的基类吗?

更新

我从13年开始每天使用Python工作.我使用了许多kwargs方法,并用许多kwargs编写了方法.在过去的几周里,读了一本书“干净的代码”,我喜欢它.不知怎的,就像现在戴着另一副眼镜一样.我的旧代码有效,但看起来并不好.将长方法拆分成几种较小的方法很容易.但我不知道如何处理kwargs-bloat的方法.

我通常将你的“Args”称为“上下文”(或者如果它具有足够的foo,则称为“FooContext”).

我认为我看到的最佳解释是:http://accu.org/index.php/journals/246(“封装上下文模式”,Allen Kelly在Overload Journal#63 – 2004年10月,我从另一个SO回答中看到:https://stackoverflow.com/a/9458244/3427357).

如果你想进行深入探索,还有一些不错的论文可以进一步阐述:
http://www.two-sdg.demon.co.uk/curbralan/papers/europlop/ContextEncapsulation.pdf
https://www.dre.vanderbilt.edu/~schmidt/PDF/Context-Object-Pattern.pdf

正如另一个SO答案(https://stackoverflow.com/a/1135454/3427357)所指出的那样,某些人认为上下文模式是危险的(参见http://misko.hevery.com/2008/07/18/breaking-the-law-of-demeter-is-like-looking-for-a-needle-in-the-haystack/).

但我认为“德米特定律”警告并不会使你的早期设计过于复杂,而不是清理你在解决其他问题时意外增长的残骸.如果您通过多个函数调用层传递“重要”布尔值,那么您已经开始测试地狱了,在这种情况下,您所描述的重构通常是我的经验中的纯粹胜利.

我不认为python中有一个标准的基类,除非你懒得将argparse.Namespace作为你的上下文对象传递,因为你已经有了参数值.

总结

以上是编程之家为你收集整理的python – Method Refactor:从许多kwargs到一个arg-object全部内容,希望文章能够帮你解决python – Method Refactor:从许多kwargs到一个arg-object所遇到的程序开发问题。


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

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

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


联系我
置顶