উত্তর:
নিম্নলিখিত বৈশিষ্ট্যটি ব্যবহার করুন:
cls.__bases__
দস্তাবেজগুলি থেকে :
একটি শ্রেণীর অবজেক্টের বেস শ্রেণির টিপল।
উদাহরণ:
>>> str.__bases__
(<type 'basestring'>,)
আরেকটি উদাহরণ:
>>> class A(object):
... pass
...
>>> class B(object):
... pass
...
>>> class C(A, B):
... pass
...
>>> C.__bases__
(<class '__main__.A'>, <class '__main__.B'>)
আপনি যদি কেবল তাত্ক্ষণিকের চেয়ে সমস্ত পূর্বপুরুষদের চান তবে ইন্সপেক্ট.টেমরো ব্যবহার করুন :
import inspect
print inspect.getmro(cls)
কার্যকরভাবে, এটি আপনাকে "পদ্ধতি সমাধানের আদেশে" সমস্ত পূর্বপুরুষ শ্রেণি দেয় - অর্থাত্ কোনও পদ্ধতি সমাধান করার সময় পূর্বপুরুষদের পরীক্ষা করা হবে (বা, আসলে, অন্য কোনও বৈশিষ্ট্য - পদ্ধতি এবং অন্যান্য বৈশিষ্ট্য একই নামস্থানে বাস করে) পাইথনে, সর্বোপরি ;-)।
cls.__mro__
(কমপক্ষে পাইথন 3.5 তে)
নতুন স্টাইলের ক্লাসগুলির একটি ম্রো পদ্ধতি রয়েছে আপনি কল করতে পারেন যা পদ্ধতি রেজোলিউশন ক্রমে পিতামাতাদের ক্লাসগুলির একটি তালিকা প্রদান করে।
object
প্রতিক্রিয়া বলে মনে হচ্ছে না mro
।
x
, আমরা কলের মাধ্যমে পদ্ধতি রেজল্যুশন অর্ডার পেতে পারেন type(x).mro()
যদি আমরা বিবেচনা করতে পারেন x
হয়েছে ClassX
: সঙ্গে একটি বেস শ্রেণী হিসেবে ClassX in type(x).mro()
সবচেয়ে দ্রুততায় পথ, সব বাবারা দেখতে, এবং এ আদেশ শুধু সালে নির্মিত ব্যবহার__mro__
অর্থাত repr(YOUR_CLASS.__mro__)
>>>
>>>
>>> import getpass
>>> getpass.GetPassWarning.__mro__
আউটপুট, ইন অর্ডার
(<class 'getpass.GetPassWarning'>, <type 'exceptions.UserWarning'>,
<type 'exceptions.Warning'>, <type 'exceptions.Exception'>,
<type 'exceptions.BaseException'>, <type 'object'>)
>>>
ওখানে তোমার আছে। এই মুহুর্তে "সেরা" উত্তরটির 182 টি ভোট রয়েছে (যেমন আমি এটি টাইপ করছি) তবে এটি লুপের জন্য কিছু সংঘাতযুক্তের চেয়ে অনেক সহজ ঘাঁটি যখন একটি বর্গ দুই বা ততোধিক পিতা বা মাতা প্রসারিত উল্লেখ না, একটি সময়ে এক বর্গ ক্লাস। inspect
অপ্রয়োজনীয়ভাবে কেবল মেঘকে আমদানি করা এবং ব্যবহার করা । এটি সত্যই লজ্জাজনক যে লোকেরা কেবল বিল্ট-ইনগুলি ব্যবহার করতে জানেন না
আশা করি এটা কাজে লাগবে!
inspect.getmro
কেবল __mro__
অবজেক্টে কল করুন, আপনি github.com/python/cpython/blob/… এ দেখতে পাচ্ছেন । ব্যবহার getmro
ক্লিনার এবং আরও পঠনযোগ্য কোড উত্পাদন করে। যদিও একটি ফাংশন কল এড়ানো সত্যিই দ্রুত।
যদি আপনি কেবল পিতামাতাদের পেতে চান তবে ব্যবহার করুন __mro__
বেসগুলি পদ্ধতি রেজোলিউশন অর্ডার পাওয়ার জন্য (@ নন্ট 101 দ্বারা নির্দেশিত হিসাবে) ব্যবহার করুন (যাতে এনআরটি কোন আদেশে কার্যকর করা হয়েছিল তা জানতে)।
বেসগুলি (এবং একটি বিদ্যমান অবজেক্টের জন্য প্রথম শ্রেণীর প্রাপ্তি):
>>> some_object = "some_text"
>>> some_object.__class__.__bases__
(object,)
সাম্প্রতিক পাইথন সংস্করণগুলিতে ম্রোর জন্য:
>>> some_object = "some_text"
>>> some_object.__class__.__mro__
(str, object)
স্পষ্টতই, যখন আপনি ইতিমধ্যে শ্রেণীর সংজ্ঞা রেখেছেন, আপনি কেবল __mro__
সরাসরি এটিতে কল করতে পারেন :
>>> class A(): pass
>>> A.__mro__
(__main__.A, object)
আপনি যদি তাদের সবাইকে কল করাতে চান তা নিশ্চিত করতে চান, super
সমস্ত স্তরে ব্যবহার করুন ।
type(C()).__bases__
আরও নীচে উল্লিখিত হিসাবে করুন