请教一个关于类和实例使用的疑问

2021-01-06 21:15:11 +08:00
 unknowfly

假设我写一个 service 类,里面所有增删改查方法都用类方法来写,和写成实例方法然后使用单例作为对象来调用,两者在设计或者在内存调用上有什么优劣之分吗

class Service:
    model = OrmModel

    @classmethod
    def create(cls, data):
        cls.mode.create(data)


class Service:
    model = OrmModel

    def create(self, data):
        self.mode.create(data)
1847 次点击
所在节点    Python
5 条回复
cominghome
2021-01-07 08:11:24 +08:00
不懂,但是对于写惯了 django 的我来说,我喜欢第二种
abersheeran
2021-01-07 09:28:52 +08:00
第一种。单例对象能少就少用吧,实践的时候发现,你可能会记得这个对象是个单例,但是你很难搞清楚在哪第一次初始化的。所以不如直接用类,利用元类初始化。这样能确定,在 class 定义加载完成的时候,它就已经初始化了。
xiaoqiao24
2021-01-07 09:40:52 +08:00
不同场景吧。
第一种我觉得适合那种项目不大,操作的 orm 对象只有一个的情况。这样全项目都用这个 service 类。
但是如果项目比较大,需要连接跨实例的多个 db,那么就需要每个进行单独配置,防止类混用。
XIVN1987
2021-01-07 09:47:08 +08:00
我觉得第一种用法和第二种用法的主要区别是:第二种用法强制调用__init__方法,这样类的设计者可以在__init__中做各种初始化和环境检查
unknowfly
2021-01-07 10:48:29 +08:00
谢谢楼上各位,想了下还是实例化吧,3L4L 说的场景也有,决定先不纠结了

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/742321

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX