Tôi đang viết một lớp hạng nhẹ có các thuộc tính được dự định có thể truy cập công khai và đôi khi chỉ được ghi đè trong các cảnh báo cụ thể. Không có điều khoản nào trong ngôn ngữ Python để tạo tài liệu 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 được chấp nhận là gì, nên có một, để ghi lại các thuộc tính này? Hiện nay tôi đang làm việc này:Làm cách nào để ghi lại các thuộc tính lớp trong Python?
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)
này sẽ dẫn đến docstring của lớp chứa phần tiêu chuẩn docstring ban đầu, cũng như các dòng thêm cho mỗi thuộc tính thông qua nhiệm vụ tăng cường để __doc__
.
Mặc dù kiểu này dường như không bị cấm rõ ràng trong số docstring style guidelines, cũng không được đề cập dưới dạng tùy chọn. Lợi thế ở đâ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 lớp docstring có thể trình bày, và tránh phải viết các chú thích để nhắc lại thông tin từ chuỗi tài liệu. Tôi vẫn cảm thấy khó chịu khi tôi phải viết các thuộc tính hai lần; Tôi đang xem xét việc sử dụng các biểu diễn chuỗi của các giá trị trong docstring để ít nhất 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 có chứa các giá trị và tài liệu cho các thuộc tính và sau đó thêm các nội dung vào lớp __dict__
và docstring vào cuối khai báo lớp; điều này sẽ làm giảm bớt nhu cầu nhập tên và giá trị thuộc tính hai lần. chỉnh sửa: ý tưởng cuối cùng này là, tôi nghĩ, không thực sự có thể, ít nhất là không tự động xây dựng toàn bộ lớp từ dữ liệu, điều này có vẻ như là một ý tưởng tồi nếu không có lý do khác để làm điều đó.
Tôi khá mới mẻ với python và vẫn đang nghiên cứu chi tiết về kiểu mã hóa, vì vậy những lời phê bình không liên quan cũng được hoan nghênh.
Nếu bạn đang tìm cách ghi lại thuộc tính mô hình Django, điều này có thể hữu ích: https://djangosnippets.org/snippets/2533/ –
Sao chép [Làm cách nào để tài liệu các trường và thuộc tính bằng Python?] (Http : //stackoverflow.com/questions/6060813/how-to-document-fields-and-properties-in-python) giữ một giải pháp khác. – bufh