একটি শ্রেণি দেওয়া 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