2011-11-28 35 views
20

Vì vậy, tôi đã đọc rằng bạn đang truy cập thuộc tính đối tượng thông qua các phương thức getter/setter như object.get_this() hoặc object.set_that(value). Mã này có giữ cho các phương thức cũng được định nghĩa trong lớp không? Hoặc chúng chỉ được sử dụng với các cá thể đối tượng. Ví dụ, nó là thành ngữ để làm điều đó theo cách này,OOP: phương thức getter/setter

class test: 
    def __init__(self,value): 
     self.value = value 
    def get_value(self): 
     return self.value 
    def method(self): 
     return some_operation(self.value) 

với get_value() định nghĩa cho việc truy cập value cho một trường hợp đối tượng, hoặc nên get_value() cũng được sử dụng trong phương pháp lớp học?

class test: 
    def __init__(self,value): 
     self.value = value 
    def get_value(self): 
     return self.value 
    def method(self): 
     return some_operation(self.get_value()) 
+4

Kiểm tra hàm built-in 'property': http://docs.python.org/library/functions.html#property – eumiro

+3

Tôi không biết bạn đã đọc cái này ở đâu nhưng tôi sẽ đặt cược không có trong bất kỳ ngữ cảnh Python nào. Trong Python, điều ngược lại là đúng. –

Trả lời

46

Trong python do not use getter/setter methods. Thay vào đó, chỉ cần truy cập vào thuộc tính, hoặc nếu bạn cần mã để chạy mỗi khi thuộc tính được truy cập hoặc thiết lập, hãy sử dụng properties.

+19

+1 Lý do bổ sung cho việc đó: [Python không phải là Java] (http://dirtsimple.org/2004/12/python-is-not-java.html) – Tadeck

+5

+1 @Tadeck điều rất quan trọng "Python không phải là java " – BlaShadow

2

Tôi sẽ không truy cập các thuộc tính của một đối tượng theo các phương pháp của đối tượng đã nói theo một cách khác với những gì tôi mong đợi các phương thức từ các đối tượng khác truy cập chúng. Tại sao? Tôi không chắc, nó có vẻ rất lạ.

Python thực hiện điều này rất dễ dàng nếu bạn sử dụng properties decorator giúp loại bỏ sự cần thiết của getters/setters có tên như "get_foo"/"set_foo".

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