2012-12-07 54 views
21

पायथन में कक्षा के संदर्भ में एक चर के लिए नामकरण सम्मेलन क्या है?पायथन कक्षा संदर्भों के लिए नामकरण सम्मेलन क्या है

# cars.py 
class Car(object): 
    pass 

class Sedan(Car): 
    pass 

class Coupe(Car): 
    pass 

class StatonWagon(Car): 
    pass 

class Van(Car): 
    pass 

def get_car_class(slug, config): 
    return config.get(slug) 

# config.py 
CONFIG = { 
    'ford-mustang': Coupe, 
    'buick-riviera': Coupe, 
    'chevrolet-caprice': Sedan, 
    'chevy-wan' Van: 
    'ford-econoline': Van 
} 

# main.py 
from config.py import CONFIG 
from cars import get_car_class 

MyCarClass = get_car_class('buick-riviera') 

my_car = MyCarClass() 

मैं ReferenceToClass पसंद करते हैं, कोड के लिए हर कोई नया जानता है कि यह एक वर्ग और नहीं एक उदाहरण है:

class MyClass(object): 
    pass 

# which one is correct? 
reference_to_class = MyClass 

# or 
ReferenceToClass = MyClass 

यहाँ एक और उदाहरण है कि मेरी स्थिति जैसा दिखता है। लेकिन जैसा कि @ पोप्लाइट ने लिखा था, साहित्य संदर्भ बहुत अच्छा होगा।

+3

संदर्भ टॉक्लास बिल्कुल MyClass के समान है (अर्थात्)। दोनों वेरिएबल्स हैं जो एक ही क्लास ऑब्जेक्ट को संदर्भित करते हैं। – Kos

उत्तर

11

मॉड्यूल स्तर दूसरे पर:

ReferenceToClass = MyClass

एक समारोह तर्क के रूप में, पहले:

reference_to_class = MyClass

+3

कोई साहित्य संदर्भ? – poplitea

+3

पेप 8 http://www.python.org/dev/peps/pep-0008/। वर्ग के लिए उपनाम वर्ग की तरह व्यवहार करता है, इसलिए इसका नाम सामान्य वर्ग नामकरण के समान योजना का पालन करना चाहिए, मुझे लगता है। – XORcist

+0

फ़ंक्शन तर्क के रूप में, पहला, मुख्य रूप से क्योंकि आप निश्चित रूप से नहीं जान सकते हैं कि आपको वास्तव में प्रकार के वंशज (यानी एक वर्ग) मिल जाएगा। –

2

मैं इसे एक उदाहरण चर, जो PEP8 के रूप में परिभाषित करता है के रूप में ही इलाज lowercase_underscore_style का उपयोग कर। (लोअरकेस, आवश्यक के रूप में अंडरस्कोर द्वारा अलग पठनीयता में सुधार करने के लिए शब्दों के साथ।)

http://www.python.org/dev/peps/pep-0008/#id34

4

tl; डॉ: के लिए वैश्विक/सार्वजनिक नाम XORcist तरह AllCaps का उपयोग कहा:

class Logger: 
    pass 

AliasLogger = Logger 

समारोह के लिए पैरामीटर और फ़ंक्शन लोकल, यह स्पष्ट करें कि आप क्लास ऑब्जेक्ट से इस तरह के वर्णनात्मक नाम से निपट रहे हैं:

def some_func(logger_class): 
    pass 

या कुछ लाइनों

def some_func(my_class_classobj): 
    pass 

जब शब्द "class" अपने classname में वास्तव में है के साथ। classobj के लिए, class_ और klass देखें।


विश्लेषण/प्रेरणा (लंबे संस्करण)

कोई पूरी तरह से पढ़ने के लिए, लेकिन एक नज़र PEP 8 पर (उस बात के लिए न तो गूगल के अजगर शैली गाइड) इस पर स्पष्ट होना प्रतीत नहीं होता है।

के बाद से एक चर नाम सिर्फ शायद अभी तक एक और name binding अजगर में, मेरी राय में यह वास्तव में कोई फर्क नहीं पड़ता कि आप के लिए बाध्य है कि परिभाषा ब्लॉक के साथ या बाद में किसी वस्तु को = बराबर के चिह्न के साथ नाम।

इस मुझे लगता है कि मॉड्यूल स्तर "उर्फ" संदर्भ में XORcist से सहमत अपनी कक्षा नामकरण मानक का पालन करना चाहिए के लिए, शायद एच.टी.एम.एल. टैगों:

class MyClass(object): 
    pass 

# good 
ReferenceToClass = MyClass 

हालांकि जब यह पैरामीटर और चर नाम की बात आती है, माना जाता है lowercase_underscores आवेदन करना चाहिए , सही? मैं केवल इतना ही नाखुश हूं, क्योंकि यह आपको उदाहरण बनाम कक्षा संदर्भ अस्पष्टता में धक्का देगा। ऐसी संभावना है कि एक ऑब्जेक्ट-लोअरकेस नाम वस्तु को एक उदाहरण होने का संकेत देने का प्रयास हो सकता है।उस बात के लिए, मैं अपने सभी लोअरकेस postfixing सलाह देते हैं, वर्ग को संदर्भित "वर्ग" प्रत्यय के साथ चर नाम, इस तरह:

class Logger(object): 
    pass 

def function_expecting_class_reference(logger_class): 
    pass 

मैं अपने उदाहरण वर्ग MyClassLogger क्योंकि वास्तविक परिदृश्यों केवल कुछ ही कक्षा में नाम बदला नाम में स्ट्रिंग "class" है। हालांकि उस बाद के मामले में मैं अब तक वर्णनात्मक नामकरण के साथ अस्पष्टता से बचने का प्रस्ताव करता हूं।

class MyClass(object): 
    pass 

def function_expecting_class_reference(another_param, my_class_classobj): 
    ReferenceToClass = MyClass 

एक अन्य विकल्प मैं लग जाते हैं my_class_klass की तरह, प्रत्यय klass उपयोग करने के लिए है: उदाहरण के लिए, यदि आप एक classobj प्रत्यय का उपयोग कर सकते हैं। हर किसी को उत्तरार्द्ध नहीं लगता है, लेकिन फिर भी मुझे यह जांचना है कि क्या वे पूर्व को बेहतर तरीके से प्राप्त करेंगे या नहीं।

+1

+1। किसी ऑब्जेक्ट संदर्भ में चर निर्दिष्ट करते समय मैं अक्सर कोड पढ़ने योग्यता को स्पष्ट और सुधारने के लिए "_ref" प्रत्यय का उपयोग करता हूं। –