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

    def some_method(self): 
     print self.var 

#for the example below 
myClass= MyClass() 

Vì vậy, tôi hiểu rằng các câu sau đây là tương đương.Quy ước "tự" của Python __init__ so với phương pháp

myClass.some_method() 
MyClass.some_method(myClass) 

Phải mất object và vượt qua nó như là đối số đầu tiên self-some_method.

Nhưng khi tôi làm:

myClass= MyClass() 

làm việc như thế dòng chảy này?

Tôi giả sử hơi khác một chút và một số phép thuật xảy ra sau hậu trường (ai đó có bộ nhớ để phân bổ).

Làm cách nào để dịch sang __init__(self)? Những gì được chuyển đến __init__MyClass?

+1

Chỉ cần một nitpick nhỏ: 'object = MyClass()' xác định lại đối tượng, có lẽ không phải là những gì bạn muốn làm. :) – mrb

+0

@mrb :) cầu kỳ, cầu kỳ (đổi tên đối tượng -> myClass) – Nix

Trả lời

13

myClass= MyClass() cuộc gọi MyClass.__new__ phương pháp để tạo ra một thể hiện của MyClass. Sau đó MyClass.__init__ được gọi với ví dụ này làm đối số đầu tiên.

Xem doc object.__new__:

đối tượng. __new__ (cls [, ...])

Được gọi để tạo một phiên bản lớp mới.

đối tượng. __init__ (self [, ...])

Được gọi khi cá thể được tạo.

+2

Đây là câu trả lời đầy đủ. –

2

MyClass() tạo đối tượng hoàn toàn mới, được chuyển đến __init__(self) làm thông số self. Sau đó, bạn có thể thiết lập bất kỳ trường nào bạn muốn trên self và sau đó MyClass() trả về trường.

Các vấn đề liên quan