
假设我写一个 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) 1 cominghome Jan 7, 2021 不懂,但是对于写惯了 django 的我来说,我喜欢第二种 |
2 abersheeran Jan 7, 2021 第一种。单例对象能少就少用吧,实践的时候发现,你可能会记得这个对象是个单例,但是你很难搞清楚在哪第一次初始化的。所以不如直接用类,利用元类初始化。这样能确定,在 class 定义加载完成的时候,它就已经初始化了。 |
3 xiaoqiao24 Jan 7, 2021 不同场景吧。 第一种我觉得适合那种项目不大,操作的 orm 对象只有一个的情况。这样全项目都用这个 service 类。 但是如果项目比较大,需要连接跨实例的多个 db,那么就需要每个进行单独配置,防止类混用。 |
4 XIVN1987 Jan 7, 2021 我觉得第一种用法和第二种用法的主要区别是:第二种用法强制调用__init__方法,这样类的设计者可以在__init__中做各种初始化和环境检查 |
5 unknowfly OP 谢谢楼上各位,想了下还是实例化吧,3L4L 说的场景也有,决定先不纠结了 |