__init__()
class Fish(object):
def __init__(self, name):
self.name = name
print("My name is: %s" % self.name)
f = Fish("fish_9527")
>>>
My name is: fish_9527
__new__()
例1
class Fish(object):
def __new__(cls, *args, **kwargs):
print("创建对象时,new 方法会被自动调用,然后分配空间")
def __init__(self):
print("Fish 类初始化")
f = Fish()
>>>
创建对象时,new 方法会被自动调用,然后分配空间
例2
class Fish(object):
def __new__(cls, *args, **kwargs):
print("创建对象时,new 方法会被自动调用")
return super().__new__(cls) # 为对象分配空间,并返回对象的引用
def __init__(self):
print("Fish 类初始化")
f = Fish()
print(f)
>>>
创建对象时,new 方法会被自动调用
Fish 类初始化
<__main__.Fish object at 0x000002769064EF28>
例3 单例模式1
class Fish(object):
# 记录第一个被创建对象的引用
instance = None
def __new__(cls, *args, **kwargs):
# 判断类属性是否是空对象
if cls.instance is None:
# 调用父类的方法,为第一个对象分配空间
cls.instance = super().__new__(cls)
# 返回类属性保存的对象的引用
return cls.instance
f1 = Fish()
print(f1)
f2 = Fish()
print(f2)
>>>
<__main__.Fish object at 0x000002769065B048>
<__main__.Fish object at 0x000002769065B048>
例4 单例模式2
- 让初始化的动作只执行一次
class Fish(object):
# 记录第一个被创建对象的引用
instance = None
init_flag = False
def __new__(cls, *args, **kwargs):
# 判断类属性是否是空对象
if cls.instance is None:
# 调用父类的方法,为第一个对象分配空间
cls.instance = super().__new__(cls)
# 返回类属性保存的对象的引用
return cls.instance
def __init__(self):
# 判断是否执行过初始化动作
if Fish.init_flag:
return
# 若没执行过,则执行初始化动作
print("Fish 类初始化")
# 修改类属性的标记
Fish.init_flag = True
f1 = Fish()
print(f1)
f2 = Fish()
print(f2)
>>>
Fish 类初始化
<__main__.Fish object at 0x00000276906632E8>
<__main__.Fish object at 0x00000276906632E8>
__call__()
>>> class A(object):
... def __call__(self):
... print("this is __call__")
...
>>> a = A()
>>> a
<__main__.A object at 0x000001DFDF94E5C0>
>>> print(a)
<__main__.A object at 0x000001DFDF94E5C0>
>>>
__str__()
>>> class A(object):
... def __str__(self):
... return "this is __str__"
...
>>> a = A()
>>> a
<__main__.A object at 0x000001DFDF94EA58>
>>> print(a)
this is __str__
>>>
__repr__()
例1
>>> class A(object):
... def __repr__(self):
... return "this is __repr__"
...
>>> a = A()
>>> a
this is __repr__
>>> print(a)
this is __repr__
>>>
例2
>>> class A(object):
... def __str__(self):
... return "this is __str__"
... def __repr__(self):
... return "this is __repr__"
...
>>> a = A()
>>> a
this is __repr__
>>> print(a)
this is __str__
>>>