प्रासंगिक हिस्सा है या django.template.backends.base.py इस तरह दिखता है:
class BaseEngine(object):
# Core methods: engines have to provide their own implementation
# (except for from_string which is optional).
def __init__(self, params):
"""
Initializes the template engine.
Receives the configuration settings as a dict.
"""
params = params.copy()
self.name = params.pop('NAME')
self.dirs = list(params.pop('DIRS'))
self.app_dirs = bool(params.pop('APP_DIRS'))
if params:
raise ImproperlyConfigured(
"Unknown parameters: {}".format(", ".join(params)))
शब्दकोश def __init__(self, params):
में params
कॉपी किया जायेगा पर नया शब्दकोश params = params.copy()
। यह सिर्फ एक ही नाम का उपयोग करता है। इसलिए, पुराने नाम को इस नाम के माध्यम से और अधिक नहीं पहुंचा जा सकता है। अगले चरणों में नया स्थानीय शब्दकोश संशोधित किया गया है लेकिन मूल एक अपरिवर्तित रहता है।
self.params = params
करना, params = params.copy()
के बजाय बहुत अलग प्रभाव होगा। इस मामले में self.params
params
के पीछे ऑब्जेक्ट के लिए सिर्फ दूसरा नाम होगा। चूंकि यह एक शब्दकोश और परिवर्तनीय है, इसलिए self.params
में सभी परिवर्तन params
प्रभावित होंगे। params.pop('NAME')
शब्दकोश से NAME'
कुंजी हटा देता है। असल में, एक चेक है कि यह खाली है: params.pop('NAME')
।
स्रोत
2015-12-12 10:13:19
अच्छी तरह से आपने जो कहा है, उससे मैं समझता हूं कि उन्होंने इसे इस्तेमाल करने के लिए सिर्फ निर्देश की प्रतिलिपि बनाई है, लेकिन इसे बदलने के लिए नहीं: तो क्यों नहीं: 'self.params = params' इसके बजाय? – Heartagramir
वे इसे बदलते हैं। मेरे उत्तर में इसके बारे में एक खंड जोड़ा गया। –
अब मुझे यह मिल गया है ... इसे बदलने के बिना एक नियम का उपयोग करने के लिए हम प्रतिलिपि() का उपयोग करते हैं। और यह सब नहीं है ... self.params कक्षा के लिए एक नया चर नहीं बनायेगा ... यह सिर्फ उस विशिष्ट वस्तु के अंदर उपयोग करने के लिए var की प्रतिलिपि बनाता है और फिर भी यह वही वस्तु है। – Heartagramir