zoukankan      html  css  js  c++  java
  • python全栈开发_day29_元类(下)

    单例

    class Song:
       __instance = None
       def __init__(self):
           pass
       @classmethod
       def getInstance(cls):
           if cls.__instance == None:
               cls.__instance = cls()
           return cls.__instance
    s1 = Song.getInstance()
    s2 = Song.getInstance()
    print(s1, s2)
    def singleton(cls):
       _instance = None
       def getInstance(*args, **kwargs):
           nonlocal _instance
           if _instance == None:
               _instance = cls(*args, **kwargs)
           return _instance
       return getInstance

    @singleton
    class A:
       def __init__(self, num):
           self.num = num
    print(A(1), A(2), A(3))
    class A:
       __instance = None
       def __new__(cls, *args, **kwargs):
           if cls.__instance == None:
               cls.__instance = super().__new__(cls)
           return cls.__instance
    print(A(), A())
    # single_module.py
    class Single:
       pass
    singleton = Single()

    # 测试文件
    from single_module import singleton
    print(singleton)
    print(singleton)

     

    就选课系统分析面向对象思想

    '''
    1.做项目,优先考虑要用到哪些对象:老师、学生、管理员、课程、学校等等,那就优先为这些对象创建出对应的类,而不是优先考虑项目要去实现哪些功能,功能的出发点永远从创建类开始,优先想到了该项目有哪些功能,也是重点向这些功能应该封装成什么类

    2.类一旦有了,再思考,该类应该有哪些属性,这就是设计__init__方法的过程,然后思考该类有哪些方法,不需要对象的参与,就是类方法,需要就是对象方法

    3.对于数据的存储,我们最终要持久化到文件或是硬盘,但是数据要在程序中使用,那就必须在内存中使用,那么数据在内存中采用哪种方式存储,列表可以,但是索引标识数据方式很不方便,字典可以,具有信息标识,对象也可以,具有信息标识,而且访问数据修改数据采用.语法,相当简单,所以优选对象存储,这也是面向对象的优点

    4.那么随着项目的发展,很多类就仅仅用来存放数据的,那这样的类就可以称之为Model类,那这些类的数据也具备很多业务逻辑,那我们在面向对象思想中,不是将功能写在Model类中,而是定义处理业务的工具类,必然专门操作与数据库打交道的操作,丢在DB_Handle类中,那这样专门处理业务逻辑的类,我们称之为Ctrl类

    5.而大型项目中有大量与用户交互的页面,我们也用专门的类来控制,这就是View类,就选课系统而言,可以封装打印各自信息的各种方法,也是在Ctrl的合适位置调用即可,这就是面向对象的 MVC 设计模式
    '''

     

  • 相关阅读:
    vim 源码分析
    Crontab无法自动执行,直接运行脚本却能执行
    chromium源代码下载(Win7x64+VS2013sp2, 39.0.2132.2)
    linux 环境变量设置方法总结(PATH/LD_LIBRARY_PATH)
    Linux 的源码安装工具 CheckInstall
    两个开源项目要搞定
    FreeRADIUS + MySQL 安装配置笔记
    Linux指令详解useradd groupadd passwd chpasswd chage 密码修改
    Github上的几个C++开源项目
    linux 中解析命令行参数(getopt_long用法)
  • 原文地址:https://www.cnblogs.com/xuxingping/p/10853779.html
Copyright © 2011-2022 走看看