পাইথনে একাধিক বেস ক্লাস থেকে একটি ক্লাস নেওয়া যেতে পারে। একে একাধিক উত্তরাধিকার বলে।
একাধিক উত্তরাধিকারে, সমস্ত বেস ক্লাসের বৈশিষ্ট্যগুলি প্রাপ্ত ক্লাসে উত্তরাধিকারসূত্রে পাওয়া যায়। একাধিক উত্তরাধিকারের সিনট্যাক্স একক উত্তরাধিকারের অনুরূপ।
class Super1: pass class Super2: pass class MultiDerived(Super1, Super2): pass
মাল্টিপল ইনহেরিটেন্স পরিস্থিতিতে, বর্তমান ক্লাসে যেকোন নির্দিষ্ট অ্যাট্রিবিউট প্রথমে সার্চ করা হয়। যদি না পাওয়া যায়, অনুসন্ধানটি একই শ্রেণীতে দুবার অনুসন্ধান না করে গভীর-প্রথম, বাম-ডান ফ্যাশনে অভিভাবক ক্লাসে চলতে থাকে।
সুতরাং, মাল্টিডিরাইভড ক্লাসের উপরের উদাহরণে অনুসন্ধানের ক্রম হল [মাল্টিডিরাইভড, সুপার1, সুপার2, অবজেক্ট]। এই অর্ডারটিকে মাল্টিডিরাইভড ক্লাসের লিনিয়ারাইজেশনও বলা হয় এবং এই অর্ডারটি খুঁজে বের করার জন্য ব্যবহৃত নিয়মের সেটকে মেথড রেজোলিউশন অর্ডার (MRO) বলা হয়।
MRO নিশ্চিত করে যে একটি ক্লাস সর্বদা তার পিতামাতার সামনে উপস্থিত হয় এবং একাধিক অভিভাবকের ক্ষেত্রে, ক্রমটি বেস ক্লাসের টিপলের মতোই হয়৷
একটি শ্রেণীর MRO __mro__ বৈশিষ্ট্য বা mro() পদ্ধতি হিসাবে দেখা যেতে পারে। পূর্ববর্তীটি একটি টিপল প্রদান করে যখন পরবর্তীটি একটি তালিকা প্রদান করে৷
>>> MultiDerived.mro() [<class '__main__.MultiDerived'>, <class '__main__.Super1'>, <class '__main__.Super2'>, <class 'object'>]