gpt4 book ai didi

python - 构造函数参数与方法调用

转载 作者:太空宇宙 更新时间:2023-11-03 15:28:14 26 4
gpt4 key购买 nike

我在 Python 3.1 中编写了一个 URL 路由器,想知道使用以下变体之一是否不仅仅是一种品味问题:

作为构造函数参数的元组:

router = Router( 
(r"/item/{id}", ItemResource()),
(r"/article/{title}", ArticleResource())
)

方法调用

router = Router()
router.connect(r"/item/{id}", ItemResource())
router.connect(r"/article/{title}", ArticleResource())

您认为这里有什么优势或劣势吗?

最佳答案

我赞成将元组传递给构造函数,原因有两个,Alex 没有提到(至少没有明确提到)。

  1. 可读性。如果代码的任何读者都明白 Router 实例需要可用的路由列表。

  2. 失去耦合。客户端代码不必为初始化 Router 实例而烦恼。这是 Router 类的职责。

如果您觉得这太笨重,我建议将 Router 类分解为更小的类,并将这些类的实例传递给 Router.__init__。例如,在这里你可以有一个 RoutesList 类:

routes = RoutesList((r"/item/{id}", ItemResource()),
(r"/article/{title}", ArticleResource()))

router = Router(routes)

这为您带来了 Alex 提到的两阶段构造的灵 active ,但也阻止了客户端代码负责初始化路由器类。这仍然保留了可读性,因为您必须向后阅读才能看到 routes 是什么,而不是向前阅读(如果您不记得的话)。它还有一个额外的好处,如果你决定改变你代表你的路线的方式,那么 Router 类根本不需要改变:所有这些改变都应该封装在 RoutesList 类中(或者甚至可能在一个 as of yet未定义的路由类)。

或者路由可以只是一个元组列表,你可以有一个模块级函数来将路由映射到 Controller ;)

关于python - 构造函数参数与方法调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3702954/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com