2012-06-27 36 views
12

tôi muốn truy cập một biến tĩnh từ một phương pháp tĩnh:Tiếp cận biến tĩnh từ phương pháp tĩnh

#!/usr/bin/env python 
class Messenger: 
    name = "world" 
    @staticmethod 
    def get_msg(grrrr): 
     return "hello " + grrrr.name 

print Messenger.get_msg(Messenger) 

Làm thế nào để làm điều đó mà không đi grrrr đến một phương pháp? Đây có phải là OOP đúng ..

Bất cứ điều gì như name hoặc self.name dường như không làm việc:

NameError: global name 'name' is not defined 

NameError: global name 'self' is not defined 

Trả lời

14

Sử dụng @classmethod thay vì @staticmethod. Tìm thấy nó chỉ sau khi viết câu hỏi.

Trong nhiều ngôn ngữ (C++, Java, v.v.), các phương thức "tĩnh" và "lớp" là từ đồng nghĩa. Not in Python.

8
def get_msg(): 
    return "hello " + Messenger.name 

Bạn không thể sử dụng self.name vì không được xác định. self là một quy ước đặt tên cho tham số đầu tiên của các phương thức non-static hoặc non-classmethod. Nó trỏ đến đối tượng mà bạn gọi là phương thức. Vì phương thức của bạn là tĩnh, bạn không cần một đối tượng để gọi nó.

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