2010-02-09 40 views
6

Tôi chỉ bắt đầu lộn xộn một chút với các lớp học; tuy nhiên, tôi đang gặp một vấn đề.Người mới sử dụng Python có vấn đề khi sử dụng các lớp học

class MyClass(object): 
    def f(self): 
     return 'hello world' 
print MyClass.f 

Tập lệnh trước đó trả về <unbound method MyClass.f> thay vì giá trị dự kiến. Làm thế nào để sửa lỗi này?

+3

hướng dẫn gì được bạn đọc? Bạn đã thấy mã như thế này ở đâu? –

+0

Tôi đã đọc từ một cuốn sách giáo khoa, tuy nhiên, nó khá mơ hồ về mã và không cung cấp một ví dụ đơn giản. Vì vậy, tôi chỉ loay hoay xung quanh và cố gắng để có được một cái gì đó để làm việc. – Pax

Trả lời

14

MyClass.f đề cập đến đối tượng hàm f là thuộc tính của MyClass. Trong trường hợp của bạn, f là một phương thức cá thể (có một tham số tự) do đó nó được gọi trên một cá thể cụ thể. Của nó "unbound" bởi vì bạn đang đề cập đến f mà không chỉ định một lớp học cụ thể, loại giống như đề cập đến một tay lái mà không có một chiếc xe hơi.

Bạn có thể tạo một thể hiện của MyClass và gọi f từ nó như vậy: (. Này quy định mà dụ để gọi f từ, vì vậy bạn có thể tham khảo các biến dụ và những thứ tương tự)

x = MyClass() 
x.f() 

Bạn đang sử dụng f làm static method. Các phương thức này không bị ràng buộc vào một lớp cụ thể và chỉ có thể tham chiếu các tham số của chúng.

Một phương pháp tĩnh sẽ được tạo ra và sử dụng như sau:

class MyClass(object): 
    def f():     #no self parameter 
     return 'hello world' 
print MyClass.f() 
+0

Cảm ơn sự giúp đỡ. – Pax

7

Tạo một thể hiện của lớp học của bạn: m = MyClass()

sau đó sử dụng m.f() để gọi hàm

Bây giờ bạn có thể tự hỏi tại sao bạn không cần phải vượt qua một tham số cho hàm (các 'tự' param). Đó là bởi vì cá thể mà bạn gọi hàm này thực sự được truyền như tham số đầu tiên.

Tức là, MyClass.f(m) bằng m.f(), trong đó m là đối tượng thể hiện của lớp MyClass.

Chúc may mắn!

+0

Cảm ơn sự giúp đỡ. – Pax

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