V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
unknowfly
V2EX  ›  Python

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

  •  
  •   unknowfly · 2021-01-06 21:15:11 +08:00 · 1825 次点击
    这是一个创建于 1196 天前的主题,其中的信息可能已经有所发展或是发生改变。

    假设我写一个 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)
    
    5 条回复    2021-01-07 10:48:29 +08:00
    cominghome
        1
    cominghome  
       2021-01-07 08:11:24 +08:00
    不懂,但是对于写惯了 django 的我来说,我喜欢第二种
    abersheeran
        2
    abersheeran  
       2021-01-07 09:28:52 +08:00
    第一种。单例对象能少就少用吧,实践的时候发现,你可能会记得这个对象是个单例,但是你很难搞清楚在哪第一次初始化的。所以不如直接用类,利用元类初始化。这样能确定,在 class 定义加载完成的时候,它就已经初始化了。
    xiaoqiao24
        3
    xiaoqiao24  
       2021-01-07 09:40:52 +08:00
    不同场景吧。
    第一种我觉得适合那种项目不大,操作的 orm 对象只有一个的情况。这样全项目都用这个 service 类。
    但是如果项目比较大,需要连接跨实例的多个 db,那么就需要每个进行单独配置,防止类混用。
    XIVN1987
        4
    XIVN1987  
       2021-01-07 09:47:08 +08:00
    我觉得第一种用法和第二种用法的主要区别是:第二种用法强制调用__init__方法,这样类的设计者可以在__init__中做各种初始化和环境检查
    unknowfly
        5
    unknowfly  
    OP
       2021-01-07 10:48:29 +08:00
    谢谢楼上各位,想了下还是实例化吧,3L4L 说的场景也有,决定先不纠结了
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   1277 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 23:23 · PVG 07:23 · LAX 16:23 · JFK 19:23
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.