Tôi đang cố gắng ghi lại gói python với sphinx
và đã tạo thành công tệp html. Gói tôi đang tạo tài liệu bao gồm tập hợp các tệp *.py
, hầu hết chứa một lớp với một vài tệp là mô-đun chính hãng có chức năng được xác định. Tôi không cần phải vạch trần sự thật là mỗi lớp học trong một mô-đun vì vậy tôi đã thêm các câu lệnh from
phù hợp vào tệp __init__.py
ví dụ:Làm cách nào để ghi lại các lớp học mà không có tên mô-đun?
from base import Base
để người dùng có thể sử dụng lệnh import pkg
và không sau đó phải chỉ rõ các mô-đun có chứa các lớp:
import pkg
class MyBase(pkg.Base): # instead of pkg.base.Base ...
...
Vấn đề là nhân sư khăng khăng ghi lại lớp như pkg.base.Base
. Tôi đã cố gắng đặt add_module_names = False
trong conf.py
. Tuy nhiên, kết quả này trong nhân sư cho thấy lớp đơn giản là Base
thay vì pkg.Base
. Ngoài ra, điều này cũng làm hỏng tài liệu của các cặp *.py
tệp mà là mô-đun.
Làm cách nào để tạo sphinx
hiển thị một lớp là pkg.Base
? Và làm cách nào để đặt chỉ thị add_module_names
có chọn lọc cho mỗi tệp *.py
?
Đừng làm vậy. Sphinx ** đúng ** cho người dùng biết lớp đó được định nghĩa ở đâu *, không phải nơi nó được nhập. Nếu bạn nhập vào lớp 'Base' trong hai mô-đun khác nhau thì Sphinx có thể cho biết tên nào bạn muốn sử dụng? Nếu bạn không muốn người dùng biết về mô-đun nơi bạn xác định lớp thì có lẽ bạn nên đặt nó ở chế độ riêng tư (nếu tôi nhớ chính xác sẽ không hiển thị trong các tệp được tạo). – Bakuriu
@Bakuriu - Không chắc tôi hiểu nhận xét của bạn. Để làm rõ, lý do duy nhất mà mỗi lớp nằm trong một tệp riêng biệt là làm cho việc quản lý mã nguồn vis-a-vis dễ dàng hơn. Việc sử dụng các lớp chỉ yêu cầu tên gói và lớp chứ không phải tên mô-đun (không cần thiết). Tài liệu nên mô tả cách sử dụng và không định nghĩa bạn không nghĩ? Làm cách nào để đặt tên mô-đun là riêng tư? –
Vậy vấn đề là gì? Chỉ cần sử dụng 'add_module_names = False' và đặt tài liệu vào đúng trang. Người dùng sẽ thấy rằng trong trang đề cập đến mô-đun 'pkg' có một lớp tài liệu' Base' và điều đó là tốt. 'Pkg.module.Base' ** chỉ ** đề cập đến module nơi lớp được định nghĩa, không phải nơi bạn" sử dụng nó "(đó là một cái gì đó không được xác định rõ). Nếu bạn muốn có một giải pháp dơ bẩn để có được kết quả mong muốn, thì trong '__init__' tạo một lớp con giả:' class TheClass (pkg.module.TheClass): pass', kế thừa tài liệu. – Bakuriu