2013-07-04 52 views
8

Tôi có một cái gì đó lớp Python như sau, với docstrings dự định sẽ được chuyển đổi thành tài liệu bằng cách Sphinx:Làm cách nào để tạo tài liệu cho trình thiết lập thuộc tính Python bằng Sphinx?

class Direction(object): 
    """ 
    A direction in which movement can be made. 
    """ 
    def __init__(self): 
     self._name = None 

    @property 
    def name(self): 
     """ 
     The unique name of the direction. 

     :return: The direction name 
     :rtype: string 
     """ 
     return self._name 

    @name.setter 
    def name(self, value): 
     """ 
     Sets the direction name. 

     :param string value: The direction name 
     """ 
     self._name = value 

Sản lượng Sphinx trông giống như sau:

lớpDirection (name) Một hướng mà trong đó chuyển động có thể được thực hiện.

tên Tên độc đáo của hướng.

Returns: Tên hướng

loại Return: chuỗi

đó là tốt như xa như nó đi, nhưng lưu ý sự vắng mặt hoàn toàn của bất kỳ thông tin về thiết lập name.

Có cách nào để đưa Sphinx tạo tài liệu cho trình thiết lập thuộc tính không?

+1

Có vẻ như sẽ có ý nghĩa hơn khi ghi lại bất kỳ hành vi nhận/tập đặc biệt nào trong tài liệu getter nếu đó là nơi Sphinx tìm kiếm nó. Tài liệu của bạn cho setter ở đây về cơ bản là thừa: nó là một thuộc tính, vì vậy nó rõ ràng là đặt giá trị, và ghi lại tham số cũng không cần thiết vì mọi setter yêu cầu cùng một đối số, và setter sẽ không thực sự được gọi một cách rõ ràng. Đặc biệt có được/thiết lập hành vi thực sự là một đặc tính của tài sản như một toàn thể. Điểm của các thuộc tính là chúng được truy cập thông qua một tên thuộc tính duy nhất, không phải các cuộc gọi hàm get/set riêng biệt. – BrenBarn

+0

@BrenBarn Tôi chắc chắn có thể làm điều đó nếu đó là những gì Sphinx đang mong đợi. Tuy nhiên, tài liệu được tạo ra không thực sự chỉ ra rằng đó là một thuộc tính và tôi không chắc chắn làm thế nào tôi có thể sử dụng các thẻ ': param:', ': return:' và ': rtype:' để làm rõ điều này? –

+2

@MatthewMurdoch, Sphinx ghi tài liệu getter mà không sử dụng '()'. Điều này, cùng với chuỗi tài liệu được kết hợp của bạn, sẽ giúp người dùng hiểu rằng đó là thuộc tính. –

Trả lời

10

Nhân sư bỏ qua tài liệu về các nhà định cư bất động sản để tất cả tài liệu cho thuộc tính phải ở phương thức @property.

Trong khi Nhân sư hiểu một số thẻ cụ thể (ví dụ: :param ...:), thẻ sẽ chấp nhận bất kỳ thẻ tùy chỉnh nào và sẽ hiển thị chúng dưới dạng nhãn cho văn bản đi theo chúng.

Do đó, một số nội dung như sau sẽ hiển thị tài liệu theo cách hợp lý (getter, settertype có thể được thay đổi thành văn bản khác nếu cần).

@property 
def name(self): 
    """ 
    The unique name of the direction. 

    :getter: Returns this direction's name 
    :setter: Sets this direction's name 
    :type: string 
    """ 
    return self._name 

Các tài liệu được tạo ra trông giống như sau:

lớpDirection (tên) Một hướng trong đó phong trào có thể được thực hiện.

tên Tên độc đáo của hướng.

Getter: Returns tên của hướng này

Setter: Sets tên của hướng này

Loại: chuỗi

T để @BrenBarm và @ A-B-B chỉ cho tôi theo hướng của giải pháp này.