Có thể sửa đổi một lớp học để làm cho có sẵn một phương pháp trang trí nhất định, mà không cần phải nhập nó một cách rõ ràng và không có tiền tố nó (@something.some_decorator
):Làm cách nào để trang trí mới có sẵn trong một lớp học mà không cần nhập chúng một cách rõ ràng?
class SomeClass:
@some_decorator
def some_method(self):
pass
Tôi không nghĩ rằng đây có thể với một trang trí lớp, bởi vì điều đó được áp dụng quá muộn. Các tùy chọn có vẻ hứa hẹn hơn là sử dụng một metaclass, nhưng tôi không chắc chắn như thế nào, tôi đoán là tôi sẽ phải có some_decorator
được giới thiệu vào không gian tên của SomeClass
.
Nhờ @MartijnPieters để chỉ ra rằng staticmethod
và classmethod
được tích hợp sẵn. Tôi đã mong đợi họ là một phần của máy móc type
.
Để rõ ràng, tôi không có bất kỳ trường hợp sử dụng rõ ràng nào cho điều này, tôi chỉ tò mò xem liệu điều này có thể thực hiện được hay không.
THÊM, bây giờ câu hỏi đã được trả lời. Lý do ban đầu tại sao tôi đang tìm cách vượt ra ngoài việc nhập hoặc xác định một trang trí cục bộ, là tôi đã định nghĩa một trình trang trí sẽ chỉ hoạt động nếu một thuộc tính vùng chứa nào đó được khởi tạo trên một đối tượng và tôi đang tìm cách thực thi việc này sự sẵn có của trang trí. Tôi đã kết thúc kiểm tra xem thuộc tính có tồn tại không và nếu không khởi tạo nó trong trang trí, điều này rất có thể là cái ác nhỏ hơn ở đây.
Cảm ơn bạn đã cập nhật điều này, câu hỏi * bây giờ rõ ràng hơn so với trước đây. –