2012-12-25 9 views
58

मैं कुछ कोड पर पिलिंट चला रहा हूं, और त्रुटि प्राप्त कर रहा हूं "बहुत कम सार्वजनिक विधियां (0/2)"। इस संदेश का क्या अर्थ है? pylint docs सहायक नहीं हैं:पिलिंट की "बहुत कम सार्वजनिक विधियों" संदेश का अर्थ

जब कक्षा में बहुत कम सार्वजनिक विधियां होती हैं, तो सुनिश्चित करें कि यह वास्तव में इसके लायक है।

+1

आपकी कक्षा कैसी दिखती है? क्या कक्षा स्टोर डेटा के अलावा कुछ भी करती है? – Blender

+1

सभी वर्ग स्टोर डेटा है। – monsur

+2

ठीक है, आपकी समस्या है। कक्षाएं डेटा स्टोर करने के लिए नहीं हैं। शब्दकोश और संरचनाओं जैसे डाटा स्ट्रक्चर के लिए यही है। – Blender

उत्तर

77

त्रुटि मूल रूप से कहा गया है कि कक्षाएं, सिर्फ दुकान डेटा नहीं होती हैं, जैसा कि आप मूल रूप से एक शब्दकोश के रूप में वर्ग के इलाज कर रहे हैं। कक्षाओं में उनके पास मौजूद डेटा पर काम करने के लिए कम से कम कुछ विधियां होनी चाहिए।

अपने वर्ग इस तरह दिखाई देता है:

class MyClass(object): 
    def __init__(self, foo, bar): 
     self.foo = foo 
     self.bar = bar 

एक शब्दकोश या इसके बजाय एक namedtuple उपयोग पर विचार करें। यद्यपि यदि कक्षा सबसे अच्छी पसंद की तरह लगती है, तो इसका इस्तेमाल करें। पिलिंट हमेशा नहीं जानता कि सबसे अच्छा क्या है।

ध्यान दें कि namedtuple अपरिवर्तनीय है और तत्काल पर आवंटित मानों को बाद में संशोधित नहीं किया जा सकता है।

+31

+1 "पिलिंट को पता नहीं है कि सबसे अच्छा क्या है" - अपने निर्णय का उपयोग करें, लेकिन एक नियम के रूप में, यदि आपको जो चाहिए वह "संरचना" है, तो 'dict' या' nametuple' का उपयोग करें। जब आप अपनी ऑब्जेक्ट में कुछ तर्क जोड़ना चाहते हैं तो एक वर्ग का उपयोग करें (उदाहरण के लिए, जब आप इसे बनाते हैं तो सामान बनना चाहते हैं, आपको कुछ विशेष चीजों की आवश्यकता होती है जब आप इसे जोड़ते हैं, तो आप इसे कुछ ऑपरेशन करना चाहते हैं, इसे नियंत्रित करें प्रदर्शित, आदि) –

+0

विस्तृत प्रतिक्रियाओं के लिए धन्यवाद! मेरा उपयोग केस बुरहान के समान है, जैसा कि मैंने बनाया है, डेटा पर कुछ प्रोसेसिंग कर रहा हूं। – monsur

+5

यदि आपके पास क्लास परिभाषा के अंदर मेटा (मेटाक्लास) है तो यह त्रुटि समझ में नहीं आती है। – istinspring

23

आप एक वर्ग का विस्तार कर रहे हैं, तो मेरे सुझाव को व्यवस्थित इस चेतावनी को निष्क्रिय करने और आगे बढ़ने, जैसे, अजवाइन कार्यों के मामले में है:

class MyTask(celery.Task): # pylint: disable=too-few-public-methods                     
    """base for My Celery tasks with common behaviors; extends celery.Task 

    ...    

यहां तक ​​कि अगर आप केवल एक ही समारोह का विस्तार कर रहे हैं, इस तकनीक को कार्य करने के लिए आपको निश्चित रूप से कक्षा की आवश्यकता है, और विस्तार करना तीसरे पक्ष के वर्गों पर हैकिंग से निश्चित रूप से बेहतर है!

+0

इस डायरेबल होने के बाद, प्री-प्रतिबद्ध अब मुझे देता है: खराब विकल्प मान 'बहुत कम-सार्वजनिक-विधि' (खराब-विकल्प-मूल्य) – Mercury

+0

क्या आपने विधियों पर 'एस' शामिल किया था? आपके खराब-विकल्प-मूल्य संदेश में यह नहीं है। – sage

+0

शायद इसे अक्षम करने का एक बेहतर तरीका कॉन्फ़िगरेशन फ़ाइल के '[BASIC] 'खंड में' min-public-methods = 0' सेट करना है। –

संबंधित मुद्दे