2009-02-27 36 views
9

Có thể trong python để tạo thuộc tính có cùng tên với tên biến thành viên của lớp hay không. ví dụ.Tạo thuộc tính python có cùng tên với tên thành viên của lớp

Class X: 
    ... 
    self.i = 10 # marker 
    ... 
    property(fget = get_i, fset = set_i) 

Hãy cho tôi biết cách tôi có thể làm như vậy. Bởi vì nếu tôi làm như vậy, đối với báo cáo kết quả tại marker tôi nhận được stack overflow cho assingm

Trả lời

21

Có thể trong python để tạo ra một tài sản với tên giống như các thành viên tên biến

số các thuộc tính, các thành viên và các phương thức đều chia sẻ cùng một không gian tên.

báo cáo kết quả tại marker tôi nhận được stack overflow

Rõ ràng. Bạn cố gắng để thiết lập i, mà gọi setter cho tài sản i, mà cố gắng để thiết lập i, mà các cuộc gọi setter cho tài sản i ... ad stackoverflowum.

Các mô hình thông thường là để làm cho thành viên giá trị phụ trợ thông thường ngoài công lập, bằng cách đặt trước nó với '_':

class X(object): 
    def get_i(self): 
     return self._i 
    def set_i(self, value): 
     self._i= value 
    i= property(get_i, set_i) 

Lưu ý bạn phải sử dụng các đối tượng mới kiểu ('đối tượng' lớp con) cho ' tài sản 'để hoạt động đúng.

+0

+1, đánh bại tôi với nó :) – Kiv

+1

-1: quên trích dẫn tài liệu: http://docs.python.org/library/functions.html#property –

+2

+1 cho "ad stackoverflowum" :) –

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