मुझे पूरी तरह से पता है कि pylint
और अन्य स्थैतिक विश्लेषण उपकरण सभी जानते नहीं हैं, और कभी-कभी उनकी सलाह की अवज्ञा की जानी चाहिए। (यह विभिन्न वर्गों के संदेशों के लिए लागू होता है, न कि सिर्फ convention
एस के लिए।)
अगर मेरे पास कक्षाएं हैं
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()
जाहिर है, यह विवादित है। यहां एक बेहतर उदाहरण है, यदि आप चाहें ।
मेरा मानना है कि इस शैली को "मिक्सिन्स" का उपयोग करके कहा जाता है।
अन्य साधनों की तरह, pylint
इस कोड को -21.67 / 10
मुख्य रूप से रेट करता है क्योंकि यह सोचता है more_methods
और related_methods
उसके पास self
या विशेषताएँ नहीं हैं otherfunc
, और stack
, my_var
क्योंकि कोड को चलाने के बिना, यह स्पष्ट रूप से नहीं देख सकता है related_methods
और more_methods
मिश्रित-में है implement_methods
।
संकलक और स्थैतिक विश्लेषण उपकरण हमेशा हलिंग समस्या को हल नहीं कर सकते हैं , लेकिन मुझे लगता है कि यह निश्चित रूप से एक ऐसा मामला है जिसमें implement_methods
यह देखना है कि क्या विरासत में मिला है यह पूरी तरह से वैध है, और यह करना बहुत आसान काम होगा।
स्थैतिक विश्लेषण उपकरण इस वैध (मुझे लगता है) OOP पैटर्न को अस्वीकार क्यों करते हैं?
कोई एक:
वे विरासत की जांच करने की कोशिश भी नहीं करते हैं या
मिश्रण मुहावरेदार, पठनीय पायथन में हतोत्साहित किया जाता है
# 1 स्पष्ट रूप से गलत है, क्योंकि अगर मैं pylint
मुझे उस वर्ग के बारे में बताने के लिए कहूं जो unittest.TestCase
उस का उपयोग करता है self.assertEqual
, (केवल कुछ में परिभाषित है unittest.TestCase
), तो यह शिकायत नहीं करता है ।
क्या मिक्स अपच या हतोत्साहित हैं?