একটি শ্রেণি দেওয়া Foo(এটি একটি নতুন ধাঁচের শ্রেণি হোক বা না), উত্তরাধিকার শ্রেণিবিন্যাসের যে কোনও জায়গায় আপনি কীভাবে সমস্ত বেস ক্লাস তৈরি করেন issubclass?
একটি শ্রেণি দেওয়া Foo(এটি একটি নতুন ধাঁচের শ্রেণি হোক বা না), উত্তরাধিকার শ্রেণিবিন্যাসের যে কোনও জায়গায় আপনি কীভাবে সমস্ত বেস ক্লাস তৈরি করেন issubclass?
উত্তর:
inspect.getmro(cls)নতুন এবং পুরাতন উভয় শৈলীর ক্লাসের জন্য কাজ করে এবং এর মতো করে দেয় NewClass.mro(): পদ্ধতিটির সমাধানের জন্য ব্যবহৃত ক্রমে শ্রেণি এবং এর পূর্বসূরি শ্রেণীর একটি তালিকা।
>>> class A(object):
>>> pass
>>>
>>> class B(A):
>>> pass
>>>
>>> import inspect
>>> inspect.getmro(B)
(<class '__main__.B'>, <class '__main__.A'>, <type 'object'>)
inspect.getmro(obj)পরিবর্তে চেষ্টা করার চেষ্টা করছিলেন inspect.getmro(type(obj))।
একটি অজগরটিতে উপলব্ধ __bases__সম্পত্তিটি দেখুন class, যেখানে ঘাঁটি শ্রেণীর একটি অংশ রয়েছে:
>>> def classlookup(cls):
... c = list(cls.__bases__)
... for base in c:
... c.extend(classlookup(base))
... return c
...
>>> class A: pass
...
>>> class B(A): pass
...
>>> class C(object, B): pass
...
>>> classlookup(C)
[<type 'object'>, <class __main__.B at 0x00AB7300>, <class __main__.A at 0x00A6D630>]
getmroস্পষ্টভাবে বলা হয়েছে "এই টিপলটিতে কোনও শ্রেণি একাধিকবার প্রদর্শিত হয় না"?
__bases__কেবল এক স্তর উপরে যায় । (যেমন আপনার পুনরাবৃত্তি ইউটিলিটি বোঝায়, তবে উদাহরণে একটি অবিশ্বাস্য দৃষ্টিভঙ্গি সম্ভবত এটি গ্রহণ না করতে পারে))
inspect.getclasstree()ক্লাস এবং তাদের বেসগুলির একটি নেস্টেড তালিকা তৈরি করবে। ব্যবহার:
inspect.getclasstree(inspect.getmro(IOError)) # Insert your Class instead of IOError.
python -c 'import inspect; from pprint import pprint as pp; pp(inspect.getclasstree(inspect.getmro(IOError)))'
আপনি __bases__ক্লাস অবজেক্টের টিপল ব্যবহার করতে পারেন :
class A(object, B, C):
def __init__(self):
pass
print A.__bases__
ফিরে আসা টিপলটির __bases__সমস্ত বেস ক্লাস রয়েছে।
আশা করি এটা সাহায্য করবে!
__bases__
পাইথন ৩.7 এ আপনাকে পরিদর্শন করতে হবে না, টাইপ.ম্রো আপনাকে ফলাফল দেবে।
>>> class A:
... pass
...
>>> class B(A):
... pass
...
>>> type.mro(B)
[<class '__main__.B'>, <class '__main__.A'>, <class 'object'>]
>>>
মনোযোগ দিন যে পাইথন 3.x এ প্রতিটি শ্রেণি অবজেক্ট ক্লাস থেকে উত্তরাধিকার সূত্রে প্রাপ্ত।
পাইথন ডকের মতে , আমরা সহজেই class.__mro__বৈশিষ্ট্য বা class.mro()পদ্ধতি ব্যবহার করতে পারি :
>>> class A:
... pass
...
>>> class B(A):
... pass
...
>>> B.__mro__
(<class '__main__.B'>, <class '__main__.A'>, <class 'object'>)
>>> A.__mro__
(<class '__main__.A'>, <class 'object'>)
>>> object.__mro__
(<class 'object'>,)
>>>
>>> B.mro()
[<class '__main__.B'>, <class '__main__.A'>, <class 'object'>]
>>> A.mro()
[<class '__main__.A'>, <class 'object'>]
>>> object.mro()
[<class 'object'>]
>>> A in B.mro()
True
যদিও জোচেনের উত্তরটি খুব সহায়ক এবং সঠিক, আপনি যেমন পরিদর্শন মডিউলটির .getmro () পদ্ধতিটি ব্যবহার করে শ্রেণি শ্রেণিবিন্যাস অর্জন করতে পারেন, পাইথনের উত্তরাধিকারের স্তরক্রম নীচে নিম্নরূপ: হাইলাইট করাও গুরুত্বপূর্ণ:
উদা:
class MyClass(YourClass):
উত্তরাধিকার সূত্রে প্রাপ্ত শ্রেণি
উদা:
class YourClass(Object):
উত্তরাধিকারসূত্রে প্রাপ্ত শ্রেণি
একটি শ্রেণি অন্যের কাছ থেকে উত্তরাধিকারী হতে পারে - শ্রেণিটির 'বংশগতভাবে উত্তরাধিকারসূত্রে প্রাপ্ত হয় - বিশেষত, এর পদ্ধতিগুলি উত্তরাধিকার সূত্রে প্রাপ্ত হয় - এর অর্থ হ'ল উত্তরাধিকারসূত্রে (শিশু) বর্গের উত্তরাধিকারী (পিতামাতা) শ্রেণীর বৈশিষ্ট্যগুলি অ্যাক্সেস করতে পারে
উদাহরণস্বরূপ -> শ্রেণী -> তারপরে উত্তরাধিকার সূত্রে প্রাপ্ত ক্লাসগুলি
ব্যবহার
import inspect
inspect.getmro(MyClass)
পাইথনের মধ্যে আপনাকে শ্রেণিবিন্যাস প্রদর্শন করবে show