मुझे लगता है कि हर एक का उपयोग मेरे लिए उस पर प्राप्त करने के लिए बहुत व्यक्तिपरक है, इसलिए मैं सिर्फ संख्याओं पर टिकूंगा।
मैंने उस समय की तुलना की, जिसमें एक परिवर्तन करने के लिए समय लगता है, और एक परिवर्तनशील, एक new_style वर्ग और स्लॉट्स के साथ एक new_style वर्ग।
यहां वह कोड है जिसका मैं इसे परीक्षण करता था (यह थोड़ा गड़बड़ है लेकिन यह काम करता है।)
import timeit
class Foo(object):
def __init__(self):
self.foo1 = 'test'
self.foo2 = 'test'
self.foo3 = 'test'
def create_dict():
foo_dict = {}
foo_dict['foo1'] = 'test'
foo_dict['foo2'] = 'test'
foo_dict['foo3'] = 'test'
return foo_dict
class Bar(object):
__slots__ = ['foo1', 'foo2', 'foo3']
def __init__(self):
self.foo1 = 'test'
self.foo2 = 'test'
self.foo3 = 'test'
tmit = timeit.timeit
print 'Creating...\n'
print 'Dict: ' + str(tmit('create_dict()', 'from __main__ import create_dict'))
print 'Class: ' + str(tmit('Foo()', 'from __main__ import Foo'))
print 'Class with slots: ' + str(tmit('Bar()', 'from __main__ import Bar'))
print '\nChanging a variable...\n'
print 'Dict: ' + str((tmit('create_dict()[\'foo3\'] = "Changed"', 'from __main__ import create_dict') - tmit('create_dict()', 'from __main__ import create_dict')))
print 'Class: ' + str((tmit('Foo().foo3 = "Changed"', 'from __main__ import Foo') - tmit('Foo()', 'from __main__ import Foo')))
print 'Class with slots: ' + str((tmit('Bar().foo3 = "Changed"', 'from __main__ import Bar') - tmit('Bar()', 'from __main__ import Bar')))
और यहाँ उत्पादन है ...
बनाना...
Dict: 0.817466186345
Class: 1.60829183597
Class_with_slots: 1.28776730003
परिवर्तनशील ...
Dict: 0.0735140918748
Class: 0.111714198313
Class_with_slots: 0.10618612142
इसलिए, यदि आप केवल चर संग्रहित कर रहे हैं, तो आपको गति की आवश्यकता होती है, और इसके लिए आपको कई गणनाएँ करने की आवश्यकता नहीं होगी, मैं एक तानाशाह का उपयोग करने की सलाह देता हूं (आप हमेशा एक फ़ंक्शन बना सकते हैं जो एक विधि की तरह दिखता है)। लेकिन, अगर आपको वास्तव में कक्षाओं की आवश्यकता है, तो याद रखें - हमेशा __ स्लॉट का उपयोग करें __ ।
ध्यान दें:
मैंने 'क्लास' का परीक्षण new_style और old_style दोनों वर्गों के साथ किया। यह पता चला है कि Old_style कक्षाएं बनाने के लिए तेज़ हैं, लेकिन संशोधित करने के लिए धीमी (बहुत अधिक लेकिन महत्वपूर्ण नहीं हैं यदि आप एक तंग लूप में बहुत सारी कक्षाएं बना रहे हैं (टिप: आप इसे गलत कर रहे हैं)।
चरों के बनाने और बदलने का समय भी आपके कंप्यूटर पर हो सकता है क्योंकि मेरा पुराना और धीमा है। सुनिश्चित करें कि आप 'वास्तविक' परिणाम देखने के लिए इसे स्वयं परखें।
संपादित करें:
मैंने बाद में नामित नाम का परीक्षण किया: मैं इसे संशोधित नहीं कर सकता लेकिन 10000 नमूने (या ऐसा कुछ) बनाने में 1.4 सेकंड का समय लगा, इसलिए शब्दकोश वास्तव में सबसे तेज़ है।
यदि मैं चाबियाँ और मूल्यों को शामिल करने के लिए तानाशाही फ़ंक्शन को बदल देता हूं और जब मैं इसे बनाता हूं, तो यह वेरिएबल युक्त वेरिएबल के बजाय वापस लौटा देता है। यह 0.8 सेकंड के बजाय मुझे 0.65 देता है ।
class Foo(dict):
pass
बनाना स्लॉट्स वाली एक क्लास की तरह है और वेरिएबल को बदलना सबसे धीमा (0.17 सेकंड) है, इसलिए इन क्लास का इस्तेमाल न करें । एक तानाशाही (गति) के लिए या ऑब्जेक्ट से व्युत्पन्न वर्ग के लिए जाएं ('सिंटैक्स कैंडी')
dict
करने से समझ में आता है, करने के लिए। साफ लाभ: जब आप डिबग करते हैं, तो बस कहते हैंprint(request)
और आप आसानी से सभी राज्य की जानकारी देखेंगे। अधिक शास्त्रीय दृष्टिकोण के साथ आपको अपने कस्टम__str__
तरीकों को लिखना होगा , जो बेकार हो जाता है यदि आपको इसे हर समय करना है।