2015-06-01 6 views
5

मैं निम्नलिखित Django मॉडल है:एक विशेषता नाम के रूप में "प्रकार" का उपयोग करना एक बुरा अभ्यास है?

class SomeProfile(models.Model): 
    type = models.CharField(max_length=1) 

का उपयोग कर रहा है एक बुरा अभ्यास माना जाता है एक विशेषता नाम के रूप में "प्रकार"?

यहाँ विशेषता "प्रकार" पीछा नहीं कर रहा है, तो यह रूप में this one

+1

संभावित डुप्लिकेट [क्या एक अंतर्निहित फ़ंक्शन नाम का उपयोग विशेषता या विधि पहचानकर्ता के रूप में करना गलत है?] (Http://stackoverflow.com/questions/9109333/is-it-bad-practice-to- उपयोग-ए-बिल्ट-इन-फ़ंक्शन-नाम-ए-एट्रिब्यूट-या-विधि-विचार) –

+0

क्यों न केवल '_type' का उपयोग करें? –

+1

@ पैड्राइक कनिंघम क्योंकि अग्रणी अंडरस्कोर का उपयोग निजी वर्ग-स्तर या मॉड्यूल-स्तर के सदस्य नामों के लिए किया जाता है (पीईपी-0008 के अनुसार)। आरक्षित नामों को हल करने के लिए, _trailing_ underscore का उपयोग करने की अनुशंसा की जाती है। –

उत्तर

6

एक ही प्रश्न नहीं है इसके साथ गलत कुछ भी नहीं है। यह python's reserved keywords का सदस्य नहीं है।

हालांकि, एक विधि type() नामकरण शायद भ्रामक होगा ...

+0

पर सहमत हुए, भले ही यह काम करता है, मैं नहीं कहूंगा कि इसमें कुछ भी गलत नहीं है। यह संभावित रूप से पाठक को कम से कम भ्रमित कर रहा है। – 101

+2

Django जिस तरह से 'id' का उपयोग करता है उससे कहीं अधिक भ्रमित है? 'id()' भी एक अंतर्निहित है ... – rnevius

+2

हाँ मुझे नहीं लगता कि यह किसी को भ्रमित करता है क्योंकि कक्षा या उदाहरण नाम देने के बिना इसे एक्सेस करने का कोई मौका नहीं है (उदाहरण के लिए। कुछ प्राइफाइल.टाइप या example.type) – Alvaro

1

हाँ - अपने खराब व्यवहार का। type कीवर्ड परिप्रेक्ष्य से बहुत सामान्य शब्द है हालांकि आरक्षित कीवर्ड नहीं है। भले ही यह आपके आवेदन में वर्तमान में कोई समस्या नहीं दे रहा है लेकिन यह भविष्य में दे सकता है क्योंकि यह पहले से ही मौजूदा पुस्तकालयों या पायथन एक्सटेंशन में उपयोग किया जा सकता था।

उदाहरण: प्रकार चर

की TypeCast जानकारी पाने के लिए
name = "John" 
age = 12 

print type(name) 
## Above line will return "<type 'str'>" 

print type(age) 
## Above line will return "<type 'int'>" 

type का उपयोग एक attribute के रूप में इस्तेमाल किया जा रहा एक बुरी बात है एक समारोह के रूप में इस्तेमाल किया जा रहा है।

+0

कार्य हैं, गुण नहीं – Alvaro

+1

संभोग - इसका कार्य। लेकिन 'गुण' के रूप में आपकी गुणों का नामकरण निश्चित रूप से भ्रम पैदा करेगा। जब हम पहले से ही जानते हैं कि 'टाइप' नामक एक फ़ंक्शन है तो मैं इसे संपत्ति नाम के रूप में उपयोग करने की अनुशंसा करता हूं। इसे एक सर्वोत्तम अभ्यास के रूप में माना जा सकता है। –

+0

यह 'id' का उपयोग न करने की तरह है, क्योंकि यह एक अंतर्निहित नाम है ... – rnevius

3

सामान्य नियम है: ऐसे नाम हैं जो लिया जाता है (उदाहरण के लिए type, file, int, आदि) है कि क्या वे एक "सुरक्षित" कीवर्ड सूची में नहीं कर रहे हैं या की परवाह किए बिना (अजगर यह अनुमति देता है के बाद से, यह नहीं है का उपयोग नहीं करते वास्तव में "आरक्षित")। जब आपको वास्तव में वास्तविक वस्तु का उपयोग करने की ज़रूरत होती है तो बिना किसी परेशानी से बचने के लिए यह मुख्य रूप से महत्वपूर्ण है (यह ध्यान दिए बिना कि आप इसे स्थानीय रूप से ओवरराइड करते हैं)।

यदि आप वास्तव में उन नामों में से किसी एक का उपयोग करना चाहते हैं, तो अंत में _ संलग्न करें (उदा। type_)।

आपके मामले में, जब से तुम एक वर्ग विशेषता के रूप में type निर्दिष्ट कर रहे हैं, यह सुरक्षित विचार किया जाना चाहिए, क्योंकि यह केवल अपने वर्ग (self.type या SomeProfile.type) के माध्यम से पहुँचा जा सकता है।

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

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