单例
class Song:
__instance = None
def __init__(self):
pass
def singleton(cls):
_instance = None
def getInstance(*args, **kwargs):
nonlocal _instance
if _instance == None:
_instance = cls(*args, **kwargs)
return _instance
return getInstance
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 设计模式
'''