Saya sepenuhnya menyadari hal itu pylint
dan alat analisis statis lainnya tidak semuanya tahu, dan kadang-kadang saran mereka harus tidak taat. (Ini berlaku untuk berbagai kelas pesan, bukan hanya convention
s.)
Jika saya punya kelas suka
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()
Jelas, itu dibuat-buat. Ini contoh yang lebih baik, jika Anda suka .
Saya percaya gaya ini disebut menggunakan "mixins".
Seperti alat-alat lain, pylint
tingkat kode ini di -21.67 / 10
, terutama karena berpikir more_methods
dan related_methods
tidak memiliki self
atau atribut otherfunc
, stack
, annd my_var
karena tanpa menjalankan kode, itu tampaknya tidak bisa melihat related_methods
dan more_methods
dicampur-in ke implement_methods
.
Kompiler dan alat analisis statis tidak selalu dapat menyelesaikan Masalah Pemutusan , tetapi saya merasa ini jelas merupakan kasus di mana melihat apa yang diwarisi oleh implement_methods
akan menunjukkan ini benar-benar valid, dan itu akan menjadi hal yang sangat mudah untuk dilakukan.
Mengapa alat analisis statis menolak pola OOP yang valid ini (menurut saya)?
Antara:
Mereka bahkan tidak mencoba memeriksa warisan atau
mixin tidak disarankan menggunakan Python idiomatis dan mudah dibaca
# 1 jelas salah karena jika saya meminta pylint
untuk memberi tahu saya tentang kelas saya yang mewarisi unittest.TestCase
yang menggunakan self.assertEqual
, (sesuatu yang didefinisikan hanya dalam unittest.TestCase
), itu tidak mengeluh.
Apakah mixin unpythonic atau berkecil hati?