2015-05-30 11 views
13

Giả sử tôi có chức năng sau đó được diễn tả trong Numpydoc style, và các tài liệu hướng dẫn là tự động được tạo ra với Sphinxautofunction directive:Có thể ẩn các đối số hàm Python trong Sphinx không?

def foo(x, y, _hidden_argument=None): 
    """ 
    Foo a bar. 

    Parameters 
    ---------- 
    x: str 
     The first argument to foo. 
    y: str 
     The second argument to foo. 

    Returns 
    ------- 
    The barred foo. 

    """ 
    if _hidden_argument: 
     _end_users_shouldnt_call_this_function(x, y) 
    return x + y 

Tôi không muốn quảng cáo đối số ẩn như một phần của API công cộng của tôi , nhưng nó xuất hiện trong tài liệu được tạo tự động của tôi. Có cách nào để nói với Sphinx bỏ qua một đối số cụ thể cho một hàm, hoặc (thậm chí tốt hơn) làm cho nó tự động bỏ qua các đối số với một dấu gạch dưới hàng đầu?

+4

Những gì bạn có dường như thiết kế thực sự xấu. Thay vào đó bạn nên có một '_foo' chức năng nơi' _hidden_parameter' không giấu chút nào, mặc dù các tài liệu cảnh báo chống lại việc sử dụng của '_foo' chức năng, và sau đó một 'foo' với * chỉ * hai tham số mà chỉ đơn giản gọi '_foo' với các giá trị đúng. Khi bạn cần tham số cuối cùng bạn sử dụng '_foo' và khi bạn không cần nó, bạn sử dụng' foo' như người dùng cuối. – Bakuriu

+0

@Bakuriu Tôi hoàn toàn đồng ý, và trong một dự án cá nhân tôi có khả năng sẽ áp dụng cách này. Thật không may, đây là tài liệu cho mã của người khác mà tôi không kiểm soát: / – SethMMorton

Trả lời

5

Tôi không nghĩ rằng có một tùy chọn cho điều đó trong Sphinx. Một cách có thể để thực hiện điều này mà không cần phải xâm nhập vào mã, là sử dụng chữ ký tùy chỉnh.

Trong trường hợp này, bạn cần một cái gì đó như:

.. autofunction:: some_module.foo(x, y) 

này sẽ ghi đè lên danh sách tham số của hàm và ẩn đối số không mong muốn trong doc.

4

Có thể chỉnh sửa chữ ký hàm trong trình xử lý cho sự kiện autodoc-process-signature.

Thông số signature của trình xử lý sự kiện giữ chữ ký; một chuỗi có dạng (parameter_1, parameter_2). Trong đoạn mã dưới đây, split() được sử dụng để loại bỏ các tham số cuối cùng của một hàm:

hidden = "_hidden_argument" 

def process_sig(app, what, name, obj, options, signature, return_annotation): 
    if signature and hidden in signature: 
     signature = signature.split(hidden)[0] + ")" 
    return (signature, return_annotation) 

def setup(app): 
    app.connect("autodoc-process-signature", process_sig) 

Kết quả là tài liệu sẽ hiển thị các chữ ký của các chức năng trong câu hỏi như foo(x, y) thay vì foo(x, y, _hidden_argument=None).

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