2013-07-09 32 views
32

trong mã của tôi, tôi có:python: NameError: tên toàn cầu' ... ‘không được định nghĩa

class A: 
    def a(): 
     ...... 

    def b(): 
     a() 
     ...... 
    b() 

Sau đó trình biên dịch sẽ nói "NameError:. Tên toàn cầu một() không được định nghĩa" Nếu tôi kéo tất cả các chất liệu ra khỏi lớp A, nó sẽ không có vấn đề gì, nhưng làm thế nào tôi có thể định nghĩa phương thức trong lớp A? Cảm ơn nhiều.

+0

Không, nó không phải là trình biên dịch mà ném ngoại lệ đó. Đây là vòng lặp thông dịch Python thực hiện điều đó. –

+0

Tại sao bạn gọi a() từ bên trong định nghĩa lớp? –

+0

@TravisGD Tôi luôn làm điều này trong Java, chẳng hạn như một phương pháp được gọi theo một phương pháp khác ... – Robert

Trả lời

58

Bạn cần gọi số self.a() để gọi a từ b. akhông chức năng toàn cục, đó là phương thức trên lớp.

Bạn có thể muốn đọc qua số Python tutorial on classes để biết thêm chi tiết.

+0

Cảm ơn, nhưng tôi phải thêm "tự" vào các tham số phương thức: a (tự), b (tự)? – Robert

+0

Ngoài ra, tôi nghĩ bạn phải tạo Aa() một phương thức tĩnh hoặc một phương thức lớp cho rằng nỗ lực của bạn gọi Aa() trước khi bạn khởi tạo một cá thể của A có nghĩa là "tự" (đối số phương thức đầu tiên) đến Aa() sẽ không xác định. Tôi không chắc tại sao người ta làm điều này cũng như cách người ta gỡ rối đối số/tham chiếu. –

+0

@Matthias Cảm ơn ... Tôi đang nghiên cứu nó .. – Robert

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