2011-07-28 17 views
16

Trong Python, tôi muốn biết rằng cho dù đó là cần thiết để bao gồm __init__ như phương pháp đầu tiên trong khi tạo ra một lớp học, như trong ví dụ dưới đây:Có cần phải bao gồm __init__ làm hàm đầu tiên mỗi lần trong một lớp bằng Python không?

class ExampleClass: 

    def __init__(self, some_message): 
     self.message = some_message 
     print "New Class instance created, with message:" 
     print self.message 

Ngoài ra, tại sao chúng ta sử dụng self để gọi các phương thức? Ai đó có thể giải thích chi tiết về việc sử dụng "tự"?

Ngoài ra, tại sao chúng ta sử dụng câu lệnh pass bằng Python?

Trả lời

34

Không, không cần thiết.

Ví dụ:

class A(object): 
    def f(): 
     print 'foo' 

Và bạn có thể sử dụng tất nhiên nó, theo cách này:

a = A() 
a.f() 

Trong thực tế, bạn thậm chí có thể định nghĩa một lớp theo cách này.

class A: 
    pass 

Tuy nhiên, việc xác định __init__ là một thực tế phổ biến bởi vì trường hợp của một lớp thường được lưu trữ một số loại nhập các thông tin trạng thái hoặc dữ liệu và các phương thức của lớp cung cấp một cách để thao tác hoặc làm điều gì đó với thông tin trạng thái hoặc dữ liệu. __init__ cho phép chúng tôi khởi tạo thông tin hoặc dữ liệu trạng thái này trong khi tạo một thể hiện của lớp.

Dưới đây là ví dụ hoàn chỉnh.

class BankAccount(object): 
    def __init__(self, deposit): 
     self.amount = deposit 

    def withdraw(self, amount): 
     self.amount -= amount 

    def deposit(self, amount): 
     self.amount += amount 

    def balance(self): 
     return self.amount 

# Let me create an instance of 'BankAccount' class with the initial 
# balance as $2000. 
myAccount = BankAccount(2000) 

# Let me check if the balance is right. 
print myAccount.balance() 

# Let me deposit my salary 
myAccount.deposit(10000) 

# Let me withdraw some money to buy dinner. 
myAccount.withdraw(15) 

# What's the balance left? 
print myAccount.balance() 

Ví dụ của lớp luôn được chuyển làm đối số đầu tiên cho phương thức của lớp. Ví dụ: nếu có class A và bạn có một phiên bản a = A(), bất cứ khi nào bạn gọi a.foo(x, y), Python, hãy gọi foo(a, x, y) của class A tự động. (Lưu ý đối số đầu tiên.) Theo quy ước, chúng tôi đặt đối số đầu tiên này là self.

+0

bạn có thể giải thích chi tiết về việc sử dụng __init __ ??? – NOOB

+0

ITYM 'a = A()', mặc dù 'a = A' cũng hoạt động nhưng có điều gì đó khác. –

+0

Alok, Cảm ơn. Sửa lỗi. –

5

Bạn không cần phải đặt nó trong lớp của bạn, nó là nhà xây dựng đối tượng.

Bạn sẽ cần nó nếu bạn muốn mọi thứ xảy ra tự động với đối tượng của bạn khi nó được instanciated.

0

Chắc chắn rằng điều này không bắt buộc.

Vui lòng đọc thêm về cách xác định các lớp trăn herehere.

Đọc thêm về __init__ bạn có thể herePython __init__ and self what do they do?.

Nói chung __init__ là một kiểu hàm tạo được gọi tự động và cho phép bạn thực hiện bất kỳ hành động bổ sung nào (thêm biến, gọi bất kỳ phương thức nào và vv) - ý tưởng là có khả năng khởi tạo cá thể vì nó đã được tạo và bây giờ bạn có thể cần phải làm điều gì đó với nó trước khi tiếp tục - ví dụ như nhớ thời gian tạo hoặc tuần tự hóa trạng thái ban đầu của nó và vv) trong khi tạo đối tượng. Vì vậy, nếu bạn không cần phải làm một số chuẩn bị đặc biệt, bạn có thể bỏ qua bằng cách sử dụng nó.

+0

'self' là đối tượng mà bạn gọi phương thức. –

+0

@abc - đọc liên kết cuối cùng về bản thân và __init__ - chủ đề đó giải thích cẩn thận cả hai câu lệnh này –

5

Ngoài câu trả lời khác, một thời điểm trong câu hỏi của bạn mà chưa được giải quyết:

Có cần phải bao gồm __init__ như đầu tiên chức năng mọi trong một lớp học bằng Python?

Câu trả lời là không. Trong trường hợp bạn cần một hàm tạo, nó có thể được đặt tại bất kỳ vị trí nào của mã của bạn, mặc dù vị trí thông thường và hợp lý là khởi đầu.

0

Không, không nhất thiết phải sử dụng init trong lớp. Đó là một hàm tạo đối tượng xác định các giá trị mặc định khi gọi lớp.

Nếu bạn đang lập trình theo cách OOP và phải có cấu trúc cơ bản của lớp học. Bạn thường sẽ cần điều này.

tôi đọc khác phụ câu hỏi của bạn liên quan đến

u có thể giải thích về việc sử dụng "tự" ??? - harsh Jul 28 '11 at 5:13

Vui lòng tham khảo bài đăng này trong ngăn xếp chồng. Có rất nhiều liên kết hữu ích để giúp bạn hiểu rõ hơn về hàm init của python.

Python __init__ and self what do they do?

6

Đây thực sự là một lời nhận xét về câu trả lời Susam, nhưng kể từ khi đại diện của tôi vẫn còn thấp tôi thêm nó như là một câu trả lời.

Điều đáng chú ý là trong trường hợp này:

class A(object): 
    def f(): 
     print 'foo' 

A thực sự thừa hưởng __init__ phương pháp từ object.

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