1.同一时刻 只能有一个人链接数据库 使用数据库的资源
一个类只能实例化一个对象
只是分配一个空间
__new__用来给对象申请空间
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29class Person(object): # 类的私有属性,用来放申请的空间 __area = None # 只用到类的属性,定义一个类方法 @classmethod def __new__(cls, *args, **kwargs): # 判断空间是否为None if cls.__area is None: # object.__new__(cls) 申请一个空间,放到容器中 cls.__area = object.__new__(cls) # 返回存放这个空间的容器 return cls.__area def __init__(self,a,b): self.a = a self.b = b # 后一个对象会将前一个对象覆盖,返回的是后一个对象属性 p1 =Person('张飞',18) p2 =Person('赵云',28) p3 =Person('刘备',48) print(p1.a,p1.b) print(id(p1)) # 0X27559088 print(id(p2)) # 0X27559088 print(id(p3)) # 0X27559088 # 上面的内存地址一样 说明 只申请了 一个空间 # 这个空间只能有一个对象
2.创建一个类属性 记录 这个类创建了多少个对象;
实例化一个对象 自动调用__new__开辟一个空间;
记录开辟了几次空间 然后得出创建了多少个对象
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24class person(): __count = 0 def __new__(cls, *args, **kwargs): cls.__count += 1 # 返回这个类初始的空间,否则这个空间一直被占用,不能实例化对象 return object.__new__(cls) def __init__(self,name,age): self.name = name self.age = age # 只用到类的属性,定义一个类方法 @classmethod def get_count(cls): return cls.__count p1=person('李白',34) p2=person('韩信',18) # 查看对象的地址 print(id(p1)) #0x12551728 print(id(p2)) #0x12551760 print(person.get_count()) # 2
最后
以上就是英勇毛衣最近收集整理的关于面向对象——单例设计模式(例子)的全部内容,更多相关面向对象——单例设计模式(例子)内容请搜索靠谱客的其他文章。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复