2011-09-11 13 views
63

मैं स्कैला कोड में कुछ पायथन कोड का अनुवाद करने की कोशिश कर रहा हूं। तो मैं पाइथन में कुल नोब हूँ।पैरामीटर के रूप में ऑब्जेक्ट के साथ कक्षा

लेकिन कुछ वर्गों में पैरामीटर के रूप में ऑब्जेक्ट क्यों होता है लेकिन इसका स्पष्ट रूप से उपयोग नहीं किया जाता है? इसे पहले स्थान पर पैरामीटर के रूप में रखने का क्या कारण है?

उदाहरण:

class Table(object) 

अपने समय के लिए धन्यवाद।

+0

[पाइथन में पुरानी शैली और नई शैली कक्षाओं के संभावित डुप्लिकेट] (http://stackoverflow.com/questions/54867/old-style-and-new-style-classes-in-python) – JBernardo

उत्तर

68

पायथन 2 में यह Table को new-style class ("क्लासिक" वर्ग के विपरीत) घोषित करता है। पायथन 3 में सभी वर्ग नई शैली के वर्ग हैं, इसलिए यह अब आवश्यक नहीं है।

नई शैली कक्षाओं में क्लासिक कक्षाओं की कमी के कुछ विशेष गुण हैं।

class Classic: pass 
class NewStyle(object): pass 

print(dir(Classic)) 
# ['__doc__', '__module__'] 

print(dir(NewStyle)) 
# ['__class__', '__delattr__', '__dict__', '__doc__', '__format__', '__getattribute__', '__hash__', '__init__', '__module__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__'] 

इसके अलावा, properties और super क्लासिक वर्गों के साथ काम नहीं करते।

पायथन 2 में सभी वर्गों को नई शैली के वर्ग बनाना एक अच्छा विचार है। एक बयान जैसे

class Foo(Base1, Base2): 

Foo एक वर्ग के रूप में घोषित किया जा रहा है में (हालांकि मानक पुस्तकालय में कक्षाओं का एक बहुत अभी भी क्लासिक कक्षाएं, पश्चगामी-संगतता के लिए कर रहे हैं।)

सामान्य तौर पर, बेस क्लास Base1 और Base2 से विरासत प्राप्त करना।

object पायथन में सभी कक्षाओं की मां है। यह एक नई शैली की कक्षा है, इसलिए object से विरासत में Table एक नई शैली की कक्षा बनाता है।

+0

क्या आप मुझे ऐसे स्रोत पर रीडायरेक्ट कर सकते हैं जो ऑब्जेक्ट का उल्लेख करता है Python3 में पैरामीटर के रूप में आवश्यक नहीं है? मुझे यह प्रतीत नहीं होता है। धन्यवाद –

+1

स्टैक ओवरफ्लो पर कई बार उल्लेख किया गया है ([उदाहरण के लिए, उदाहरण के लिए] (https://stackoverflow.com/a/16193572/190597)), लेकिन मुझे इसकी सरल घोषणा नहीं मिली है डॉक्स। यह स्पष्ट रूप से दिखाया गया है (वर्ग अड्डों की सूची से 'ऑब्जेक्ट' को छोड़कर) [ट्यूटोरियल में] (https://docs.python.org/3/tutorial/classes.html#class-definition-syntax)। – unutbu

+1

[पायथन 3 डॉक्स] (https://docs.python.org/3/glossary.html#term-new-style-class) यह भी बताता है कि "नई शैली की कक्षा" "स्वाद के लिए पुराना नाम है वर्ग ** अब सभी वर्ग वस्तुओं के लिए उपयोग किया जाता है ** "(मेरा जोर)। और [पायथन 2 दस्तावेज़ राज्य] (https://docs.python.org/2/glossary.html#term-new-style-class) कि एक "नई शैली वर्ग" कोई भी वर्ग है जो 'ऑब्जेक्ट' से प्राप्त होती है। दोनों बयान एक साथ रखे गए हैं कि आपको Python3 में कक्षा अड्डों की सूची में 'ऑब्जेक्ट' शामिल करने की आवश्यकता नहीं है क्योंकि सभी कक्षाएं Python3 में नई शैली के वर्ग हैं। – unutbu

14

Table कक्षा object नामक कक्षा को विस्तारित कर रही है। यह एक तर्क नहीं है। कारण आप object का विस्तार करना चाहते हैं स्पष्ट रूप से यह कक्षा को एक नई शैली के वर्ग में बदल देता है। यदि आप स्पष्ट रूप से निर्दिष्ट नहीं करते हैं कि यह पाइथन 3 तक object तक फैला है, तो यह पुरानी शैली की कक्षा होने के लिए डिफ़ॉल्ट होगा। (पाइथन 3 के बाद से, सभी कक्षाएं नई शैली हैं, चाहे आप स्पष्ट रूप से object का विस्तार करें या नहीं।)

नई शैली और पुरानी शैली के वर्गों के बारे में अधिक जानकारी के लिए, कृपया see this question देखें।

+1

यह और भी है सीधा और संक्षिप्त जवाब। धन्यवाद। – Sabuncu

2

कक्षा तालिका और कक्षा तालिका (वस्तु) पायथन के लिए अलग नहीं हैं।

यह एक पैरामीटर नहीं है, यह ऑब्जेक्ट से विस्तारित है (जो कई अन्य भाषाओं की तरह बेस क्लास है)।

यह सब कहता है कि यह "ऑब्जेक्ट" में परिभाषित जो भी हो जाता है। यह डिफ़ॉल्ट व्यवहार है।

+3

स्वचालित रूप से 'ऑब्जेक्ट' को विस्तारित करने वाली कक्षाएं केवल पायथन 3 में डिफ़ॉल्ट व्यवहार है। पायथन 2 में, एक वर्ग विस्तारित वस्तु में गुण होते हैं कि एक वर्ग जो वस्तु का विस्तार नहीं करता है, में नहीं होगा। –

1

बस एक नोट "नई शैली" बनाम "पुरानी शैली" वर्ग भेद पायथन 2.x के लिए विशिष्ट है कि; 3.x में सभी वर्गों रहे हैं "नई शैली"

0

1)। कक्षा का नाम (ऑब्जेक्ट): 2) वर्ग का नाम: वे दोनों समान हैं लेकिन लेखन के मामले में पहले एक बेहतर है, यह दूसरे वर्गों को दूसरे वर्ग में विरासत में रखते हुए बेहतर दिखता है, यह सजातीय दिखता है।

वही कैसे? तो, पाइथन में हर चीज ऑब्जेक्ट के तहत आती है इसका मतलब है कि पाइथन में हर चीज़ में ऑब्जेक्ट की संपत्ति होती है, अगर लिखती है या नहीं तो यह समझ जाएगी। पहले हम स्पष्ट रूप से इसे दूसरे में बताते हैं कि हमने नहीं किया।

+0

यह पायथन 2 में नहीं है, विवरण के लिए स्वीकृत उत्तर देखें। – niemmi

0

ऑब्जेक्ट पाइथन में परिभाषित कक्षा वस्तु का सबसे मूल प्रकार है। वस्तु की गुण

नीचे के रूप में देखा जा सकता है ** >>> dir (वस्तु)

[ 'वर्ग', 'delattr', 'डॉक', 'प्रारूप' 'getAttribute', 'हैश', 'init', 'नई', ' को कम', 'reduce_ex ',' रेपर ',' setattr ',' sizeof ',' str ',' subclasshook '] **

तो टेबल (वस्तु) सिर्फ विरासत है। !

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