2011-07-02 34 views
7
class MyClass(object): 
    def __init__(self): 
     self.var = "hi" 

    def some_method(self): 
     print self.var 

#for the example below 
myClass= MyClass() 

所以我明白下面的语句是等价的。Python“自我”约定__init__ vs方法

myClass.some_method() 
MyClass.some_method(myClass) 

它需要object,并将其作为第一个参数selfsome_method

但是当我做:

myClass= MyClass() 

这是如何流动的工作?

我假设它略有不同,并且幕后发生了一些魔法(有人有一些内存可以分配)。

这是怎么翻译成__init__(self)?什么传递给__init__MyClass

+1

只是一个小小的挑剔:'object = MyClass()'重新定义了对象,这可能不是你想要做的。 :) – mrb

+0

@mrb :)挑剔,挑剔(重命名对象 - > myClass) – Nix

回答

13

myClass= MyClass()电话MyClass.__new__方法创建的MyClass一个实例。之后,MyClass.__init__以此实例作为第一个参数被调用。

查看该文档object.__new__

对象。 __new__(cls [,...])

调用以创建类cls的新实例。

对象。 __init__(self [,...])

实例创建时调用。

+2

这是完整的答案。 –

2

MyClass()创建一个全新的对象,将其作为参数self传递给__init__(self)。然后,您可以在self上设置所需的任何字段,然后MyClass()将其返回。