首页 > 解决方案 > 从类中创建对象时如何留出内存?

问题描述

我读到__init__不会创建对象(预留内存)。

我找不到实际创建对象的人。这个对象创建是如何在内部发生的?

标签: pythonpython-3.xpython-2.7

解决方案


简短的回答

作为一个简短的回答,创建对象的方法是 __new__ 并且__init__只是初始化创建的对象。

长答案

但是,如果您想更深入地了解在 python 中创建对象时发生了什么,请继续阅读。


在 python 2.x 中,python 旧式和新式类中有两种类型的类。

class C: # A old-style class sample 
     pass

class C(object): # A old-style class sample 
     pass

在旧式类中,没有__new__ 方法__init__,构造函数也是如此。但是,在 python 3.x 中,只保留了新样式的类(与您为类选择的任何类型的定义无关,它将继承自基类“Object”)。在新式类中,__new____init__ 方法都可用。__new__and__init__分别是构造函数和初始化程序,并且您可以覆盖它们(请注意,通常在某些情况下您不需要覆盖__new__方法期望,例如定义元类等,所以如果它是,请不要操作它没有必要。)最后,当要创建一个对象时,构造函数将在初始化程序之前调用。

class A(object):  # -> don't forget the object specified as base

def __new__(cls):
    print "A.__new__ called"
    return super(A, cls).__new__(cls)

def __init__(self):
    print "A.__init__ called"

A()

输出将是:

A.__new__ called
A.__init__ called

推荐阅读