Tôi hoàn toàn biết rằng pylint
và các công cụ phân tích tĩnh khác không phải là tất cả, và đôi khi lời khuyên của họ phải không được tuân theo. (Điều này áp dụng cho các loại tin nhắn khác nhau, không chỉ convention
s.)
Nếu tôi có lớp như
class related_methods():
def a_method(self):
self.stack.function(self.my_var)
class more_methods():
def b_method(self):
self.otherfunc()
class implement_methods(related_methods, more_methods):
def __init__(self):
self.stack = some()
self.my_var = other()
def otherfunc(self):
self.a_method()
Rõ ràng, đó là giả. Đây là một ví dụ tốt hơn, nếu bạn thích .
Tôi tin rằng phong cách này được gọi là sử dụng "mixins".
Giống như các công cụ khác, pylint
đánh giá mã này -21.67 / 10
, chủ yếu là vì nó nghĩ more_methods
và related_methods
không có self
hoặc thuộc tính otherfunc
, stack
và my_var
vì không chạy mã, nó dường như không thể nhìn thấy related_methods
và more_methods
được trộn lẫn vào implement_methods
.
Trình biên dịch và các công cụ phân tích tĩnh không phải lúc nào cũng có thể giải quyết được vấn đề Ngừng , nhưng tôi cảm thấy đây chắc chắn là một trường hợp trong đó nhìn vào những gì được thừa hưởng implement_methods
sẽ cho thấy điều này là hoàn toàn hợp lệ và đó là một điều rất dễ thực hiện.
Tại sao các công cụ phân tích tĩnh từ chối mẫu OOP hợp lệ (tôi nghĩ) này?
Hoặc:
Họ thậm chí không thử kiểm tra thừa kế hoặc
mixins không được khuyến khích trong Python thành ngữ, dễ đọc
# 1 rõ ràng là không chính xác bởi vì nếu tôi yêu cầu pylint
cho tôi biết về một lớp của tôi thừa hưởng unittest.TestCase
việc sử dụng đó self.assertEqual
, (một cái gì đó chỉ được xác định trong unittest.TestCase
), thì nó không phàn nàn.
Là mixin unpythonic hoặc không khuyến khích?