Python基础-面向对象(2)
一、__new__方法
:
__new__
方法是用来控制这个类创建对象的执行逻辑。这个方法是在对象还没有创建之前就会执行的。而__init__
方法是在对象创建完毕后才执行。比如看下以下代码的执行顺序:
class Person(object):
# __new__方法的参数不是self,而是cls,代表当前这个类
def __new__(cls,*args,**kwargs):
print('new方法执行')
# 一定要返回对象,不然就不会创建对象
# object的__new__不接收参数,因此__new__方法不能传入*args和**kwargs参数
return super(Person,cls).__new__(cls)
# __init__方法是在对象被创建完毕后进行一些初始化的
# 因此这时候是self,因为这个对象已经存在了
def __init__(self):
print('init方法执行')
# __del__方法是在这个对象被销毁的时候调用的
def __del__(self):
print('del方法执行')
p = Person()
# 打印顺序
# 1. new方法执行
# 2. init方法执行
# 3. del方法执行
二、Python创建单例对象:
单例的意思是:在程序中,某个类的对象只有一个。这种需求其实很常见,比如一个项目中有一个配置文件,那么可以通过定义一个Config
的类来操作配置信息,但是配置信息在整个项目中其实只需要一份就够了,这时候就可以使用到单例模式了。
# 单例模式
class Person(object):
__instance = None
def __new__(cls,*args,**kwargs):
if not cls.__instance:
cls.__instance = super().__new__(cls)
return cls.__instance
p1 = Person()
p2 = Person()
print(id(p1))
print(id(p2))