推荐学习书目
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 · Jan 6, 2021 · 2335 views
    This topic created in 1976 days ago, the information mentioned may be changed or developed.

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