स्पाइडर IDE के साथ एक नया वर्ग कोडिंग, और अंतिम परिणाम की जाँच करने के pylint उपयोग करते समय, मैं त्रुटि संदेश में भाग लिया है की init__ में __dict__ के उपयोग (लेकिन त्रुटि के बिना उम्मीद के रूप में कोड काम)।pythonic: समारोह आत्म .__ एक वर्ग
संदर्भ: कन्स्ट्रक्टर फ़ंक्शन में, मैं नए सदस्य बनाना चाहता हूं (काफी कुछ)। आमतौर पर, इन पर्याप्त कुछ तो मैं इस कोडिंग का उपयोग कर रहे हैं:
class MyClass():
def __init__(self):
self.a = ...
self.b = ...
लेकिन कई सदस्यों के एक मामले में (10 मान लीजिए), एक ही प्रारंभिक मूल्य के लिए सभी सेट के साथ (चलो कहते हैं कि वे सब dict हैं())
class MyClass():
def my_method(self):
print self.c
त्रुटिसाथ:
class MyClass():
def __init__(self):
_vars = ["a", "b", "c", ...]
for _var in _vars:
self.__dict__[_var] = dict()
कक्षा में
इसके अलावा, मैं का उपयोग कर एक सदस्य के लिए बात कर रहा था:, मैं ऐसा करने के लिए परीक्षा की गई थी pylint (स्पाइडर में):
जब इस फाइल पर pylint का उपयोग कर, मैं एक त्रुटि संदेश कह रही है:
MyClass.my_method: 'MyClass' का उदाहरण नहीं है 'c'member ।
हालांकि, कोड त्रुटि के बिना ठीक है, यानी। मैं बिना किसी समस्या के सदस्य 'सी' तक पहुंच सकता हूं।
प्रश्न: क्या यह एक उचित कोडिंग है, या क्या मुझे सदस्यों को आरंभ करने के लिए ऐसी विधि से बचना चाहिए?
मुझे यकीन है कि आप 'MyClass' के साथ क्या करने की कोशिश कर रहे हैं कि वास्तव में क्या नहीं कर रहा हूँ, लेकिन जैसे आप एक' collections.defaultdict में निवेश कर सकते हैं (यह लग रहा है) '। Http://docs.python.org/library/collections.html#collections.defaultdict देखें।अभी भी दिलचस्पी है कि अन्य लोगों को स्वयं को संशोधित करने के बारे में क्या कहना है .__ dict__, एक आवृत्ति चर बनाने के बजाय जो एक शब्दकोश होता है। – Noah
@ नोहा धन्यवाद नोहा, मुझे डिफॉल्टडिक्ट क्लास नहीं पता था। यह वास्तव में दिलचस्प लगता है! अब मैं देख रहा हूं कि मैंने निश्चित रूप से मेरे कोड के लिए कुछ "टूल्स" कोड किए हैं, जो शायद कुछ बेहतर कोड किए गए पायथन मॉड्यूल में बनाए गए हैं (उदाहरण के लिए। मैंने एक साधारण चीज़ बनाई है जो डिफॉल्ट डिक्ट की तरह कुछ ऐसा लगता है, हालांकि बहुत कम जटिल)। बहुत बहुत धन्यवाद। – mhavel