मैं अपने कोड में निम्नलिखित का उपयोग कर:IPython कस्टम dict वर्ग के लिए टैब पूरा होने
class Structure(dict,object):
""" A 'fancy' dictionary that provides 'MatLab' structure-like
referencing.
"""
def __getattr__(self, attr):
# Fake a __getstate__ method that returns None
if attr == "__getstate__":
return lambda: None
return self[attr]
def __setattr__(self, attr, value):
self[attr] = value
def set_with_dict(self, D):
""" set attributes with a dict """
for k in D.keys():
self.__setattr__(k, D[k])
सब यह मेरी प्रयोजनों के लिए काम करता है में
सभी, लेकिन मैंने देखा है कि एक ही रास्ता टैब पूरा होने से काम करता है के लिए है संरचना से विरासत में प्राप्त एक और कस्टम वर्ग में विधियों, और विशेषताओं के लिए नहीं। मैं भी इस परीक्षण किया है, और मैं परिणाम एक छोटे से अजीब लगता है:
In [2]: d = Structure()
In [3]: d.this = 'that'
In [4]: d.this
Out[4]: 'that'
In [5]: d.th<tab>
NOTHING HAPPENS
In [6]: class T():
...: pass
...:
In [7]: t = T()
In [8]: t.this = 'cheese'
In [9]: t.th<tab>
COMPLETES TO t.this
Out[9]: 'cheese'
मुझे अपने वर्ग में जोड़ने के लिए टैब पूरा होने विशेषताओं के लिए काम करने के लिए प्राप्त करने के लिए की आवश्यकता होगी?
आप इसे करने के अलावा * में, डॉट पहुँच * * के बजाय ब्रैकेट अनुक्रमण चाहते नहीं * हैं, आप बस 'ऑब्जेक्ट' के खाली उप-वर्ग का उपयोग कर सकते हैं। पाइथन ऑब्जेक्ट्स डिफ़ॉल्ट रूप से "खुले" होते हैं। 'x.set_with_dict()' को 'x .__ dict __। अद्यतन()' – millimoose
के साथ प्रतिस्थापित किया जा सकता है इसके अलावा, 'dict' और' ऑब्जेक्ट 'दोनों से विरासत में अनावश्यक है, क्योंकि 'dict' (और अधिकांश मानक लाइब्रेरी कक्षाएं) नई- स्टाइल क्लास और पहले से ही 'ऑब्जेक्ट' से प्राप्त होता है। – millimoose
एकाधिक विरासत के बारे में अच्छी बात है। हालांकि, मैं _both_ ब्रैकेट और मेरी कुंजी पर डॉट पहुंच प्राप्त करना चाहता हूं। मैं एक शुद्ध पायथन निर्देश का उपयोग करने के लिए अपना कोड स्विच करने की कोशिश कर रहा हूं, लेकिन अभी भी कुछ जगहें हैं जो डॉट एक्सेस पर भरोसा करती हैं ... – John