魔术方法
魔术方法
new()
new()被用来创建一个类的实例对象
Python 中,创建一个新的实例一般是通过调用类的构造函数 __init__() 来完成的。然而,类名()创建对象时,在自动执行 __init__()方法前,会先执行 object.__new__方法,在内存中开辟对象空间并返回该对象。然后,Python 才会调用 __init__() 方法来对这个新实例进行初始化。
class Person(object):
# 其中,cls参数表示类本身,*args 和 **kwargs参数用于接收传递给构造函数的参数。
def __new__(cls, *args, **kwargs):
print("__new__方法执行")
# return object.__new__(cls)
def __init__(self, name, age):
print("__init__方法执行")
self.name = name
self.age = age
yuan = Person("yuan", 23)
_new__()方法的主要作用是创建实例对象,它可以被用来控制实例的创建过程。相比之下,__init__()方法主要用于初始化实例对象。
__new__() 方法在设计模式中常常与单例模式结合使用,用于创建一个类的唯一实例。单例模式是一种创建型设计模式,它确保一个类只有一个实例,并提供一个全局访问点来获取该实例。
class Singleton:
_isinstance = None
def __new__(cls, *args, **kwargs):
if not cls._isinstance:
cls._isinstance = object.__new__(cls)
return cls._isinstance
def __init__(self, name):
print("执行__init__")
self.name = name
s1 = Singleton("aa")
s2 = Singleton("aabb")
print(id(s1), id(s2)) # id相同
print(s1.name) # aabb
getitem
setitem
delitem
contains
本文来自博客园,作者:覃空万里,转载请注明原文链接:https://www.cnblogs.com/qinkwl/p/18632445
浙公网安备 33010602011771号