Python 2.x में बेस क्लास के रूप में बिल्ट-इन टाइप की उपस्थिति या अनुपस्थिति के आधार पर क्लासेस की दो स्टाइल होती हैं:
"क्लासिक" स्टाइल या ओल्ड स्टाइल क्लासेस का कोई बिल्ट-इन टाइप बेस क्लास के रूप में नहीं होता:
>>> class OldSpam:
# कोई बेस क्लास नहीं
pass
>>> OldSpam.__bases__
()
"न्यू" स्टाइल क्लासेस: उनका बिल्ट-इन टाइप बेस क्लास के रूप में होता है, अर्थात डायरेक्टली या इनडायरेक्टली, उनका object बेस क्लास के रूप में होता है:
>>> class NewSpam(object):
# सीधे object से इनहेरिट
pass
>>> NewSpam.__bases__
(<type 'object'>,)
>>> class IntSpam(int):
# इनडायरेक्टली object से इनहेरिट...
pass
>>> IntSpam.__bases__
(<type 'int'>,)
>>> IntSpam.__bases__[0].__bases__
# ... क्योंकि int object से इनहेरिट करता है
(<type 'object'>,)
क्लास लिखते समय हमेशा न्यू-स्टाइल क्लासेस के लिए जाना चाहिए। ऐसा करने के फायदे कई हैं, उनमें से कुछ:
- क्लासमेथड - एक मेथड जो इंस्टेंस के बजाय क्लास को इम्प्लिसिट आर्गुमेंट के रूप में प्राप्त करता है।
- स्टैटिकमेथड - एक मेथड जो पहले आर्गुमेंट के रूप में इम्प्लिसिट आर्गुमेंट self प्राप्त नहीं करता।
- प्रॉपर्टीज़ property के साथ: एट्रिब्यूट को प्राप्त करने, सेट करने और डिलीट करने के लिए फंक्शन बनाएं।
Python 3.x केवल न्यू स्टाइल क्लासेस को इम्प्लिसिटली सपोर्ट करता है। क्लास डिक्लेरेशन में पैरेंथेसिस में object शब्द लिखने की कोई आवश्यकता नहीं है।