python 面向对象之真正的构造方法魔术方法__new__

python 类中的__init__方法并非真正的构造方法,在类名加()自动调用__init__之前还调用了__new__方法,而__new__必须返回一个当前类对象才能继续调用__init__,__init__实际上是初始化方法

class Foo(object):
    def __init__(self, a1, a2):     # 初始化方法
        """
        为空对象进行数据初始化
        :param a1:
        :param a2:
        """
        self.a1 = a1
        self.a2 = a2

    def __new__(cls, *args, **kwargs): # 构造方法
        """
        创建一个空对象
        :param args:
        :param kwargs:
        :return:
        """
        # 所有的对象都是object创建的
        # 必须返回一个当前类对象才能继续调用__init__
        return object.__new__(cls) # Python内部创建一个当前类的对象(初创时内部是空的.).

obj1 = Foo(1,2)
print(obj1)

obj2 = Foo(11,12)
print(obj2)

你可能感兴趣的:(Python)