Tôi đang viết một lớp nhẹ có các thuộc tính nhằm mục đích có thể truy cập công khai và đôi khi chỉ bị ghi đè trong các phần trình bày cụ thể. Không có quy định nào trong ngôn ngữ Python để tạo docstrings cho các thuộc tính lớp hoặc bất kỳ loại thuộc tính nào cho vấn đề đó. Cách dự kiến và được hỗ trợ, nên có, để ghi lại các thuộc tính này là gì? Hiện tại tôi đang làm những việc như sau:
class Albatross(object):
"""A bird with a flight speed exceeding that of an unladen swallow.
Attributes:
"""
flight_speed = 691
__doc__ += """
flight_speed (691)
The maximum speed that such a bird can attain.
"""
nesting_grounds = "Raymond Luxury-Yacht"
__doc__ += """
nesting_grounds ("Raymond Luxury-Yacht")
The locale where these birds congregate to reproduce.
"""
def __init__(self, **keyargs):
"""Initialize the Albatross from the keyword arguments."""
self.__dict__.update(keyargs)
Điều này sẽ dẫn đến việc docstring của lớp chứa phần docstring chuẩn ban đầu, cũng như các dòng được thêm vào cho mỗi thuộc tính thông qua phép gán tăng cường cho __doc__
.
Mặc dù phong cách này dường như không bị cấm rõ ràng trong nguyên tắc về kiểu docstring , nhưng nó cũng không được đề cập như một tùy chọn. Ưu điểm ở đây là nó cung cấp một cách để ghi lại các thuộc tính cùng với các định nghĩa của chúng, trong khi vẫn tạo ra một chuỗi docstring của lớp có thể trình bày được và tránh phải viết các chú thích nhắc lại thông tin từ chuỗi docstring. Tôi vẫn hơi khó chịu vì tôi thực sự phải viết các thuộc tính hai lần; Tôi đang xem xét sử dụng các biểu diễn chuỗi của các giá trị trong docstring để ít nhất là tránh trùng lặp các giá trị mặc định.
Đây có phải là sự vi phạm nghiêm trọng các quy ước cộng đồng đặc biệt không? Như thế có ổn không? Có cách nào tốt hơn? Ví dụ, có thể tạo một từ điển chứa các giá trị và docstrings cho các thuộc tính, sau đó thêm nội dung vào lớp __dict__
và docstring vào cuối khai báo lớp; điều này sẽ giảm bớt nhu cầu nhập tên thuộc tính và giá trị hai lần. chỉnh sửa : ý tưởng cuối cùng này, tôi nghĩ là không thực sự khả thi, ít nhất không phải là không xây dựng động toàn bộ lớp từ dữ liệu, có vẻ như là một ý tưởng thực sự tồi trừ khi có một số lý do khác để làm điều đó.
Tôi còn khá mới với python và vẫn đang tìm hiểu chi tiết về phong cách mã hóa, vì vậy những lời phê bình không liên quan cũng được hoan nghênh.
attribute doc string
đề cập trong PEP 257 không được nhiều người biết đến và có vẻ khó tìm có thể trả lời câu hỏi OP và được hỗ trợ bởi một số công cụ nguồn. Đây không phải là ý kiến. Đó là sự thật, là một phần của ngôn ngữ, và khá chính xác những gì OP muốn.