Advertisement
Python Inheritance Part - 02 ( MRO and super() )

Python Inheritance Part - 02 ( MRO and super() )

2 min read
View on Hashnode

Share this article

গত আর্টিকেলে আমরা পাইথন এর ইনহেরিট্যান্স এবং তার প্রকারভেদ নিয়ে আলোচনা করেছিলাম। সেখানে Multiple Inheritance সম্পর্কে জেনেছি আমরা। Multiple Inheritance এ একটি চাইল্ড ক্লাসের একাধিক প্যারেন্ট ক্লাস থাকে। আমরা জানি কো্ন চাইল্ড ক্লাসের মধ্যে যে প্রোপার্টি বা মেথড আছে , ঠিক সেম নামে মেথড বা প্রোপার্টি যদি তার প্যারেন্ট ক্লাসে থাকে তাহলে সেটি ওভাররাইড হয়ে যায়। আবার ধরা যাক , আমরা এমন একটি প্রোপার্টি বা মেথড অ্যাক্সেস করতে চাচ্ছি সেটি চাইল্ড ক্লাসে নেই ; কিন্তু প্যারেন্ট ক্লাসে এবং সেই চাইল্ড ক্লাসের যতগুলো প্যারেন্ট আছে তাদের সবার কাছেই আছে। এক্ষেত্রে চাইল্ড ক্লাস কার মেথড বা প্রোপার্টি পাবে ? এক্ষেত্রে চলে আসে MRO concept এবং super() method।

Method Resolution Order

MRO এর পূর্ণরূপ হচ্ছে Method Resolution Order। এটি এমন একটি সিস্টেম যার মাধ্যমে ঠিক করা হয় কোন মেথড বা প্রোপার্টি কল হবে। আমরা যদি mro() বা __mro__ মেথড কল করি তাহলে সেটি দেখতে পারবো।

class A:
    def show(self):
        print("Class A")

class B(A):
    def show(self):
        print("Class B")

class C(A):
    def show(self):
        print("Class C")

class D(B, C):
    pass

d = D()
d.show()
print(D.mro())

Output

Class B
[<class '__main__.D'>, <class '__main__.B'>, <class '__main__.C'>, <class '__main__.A'>, <class 'object'>]

দেখা যাচ্ছে , কোন মেথড বা প্রোপার্টি অ্যাক্সেস করতে চাইলে সবার আগে D তে খুজবে , না পেলে B এরপর C এবং তারপর A তে। অর্থাৎ , খেয়াল করলে দেখতে পারবো পাইথনে MRO বাম থেকে ডানে খুজে দেখে। আর এটিই MRO

super() Method

আমরা জানি , প্যারেন্ট ক্লাসে যদি কোন প্রোপার্টি বা মেথড থাকে এবং ঠিক সেম নামে মেথড বা প্রোপার্টি যদি চাইল্ড ক্লাসে থাকে তবে প্যারেন্ট ক্লাস এর প্রোপার্টি বা মেথড চাইল্ড ক্লাস ইউজ করে না। MRO System এর কারনে। ব্যাপারটা হচ্ছে এমন যে , “ আমাদের নিজেদের কাছে যখন ফোন থাকে তখন কিন্তু আর আমরা আমাদের বাবা-মায়ের ফোন ইউজ করি না। কিন্তু যদি এমন হয় , আমরা কাউকে কল করবো কিন্তু আমাদের ফোনে ব্যালেন্স নেই ; তখন কিন্তু আমাদের বাবা-মায়ের ফোন বাধ্য হয়ে ইউজ করতে হয়“। প্রোগ্রামিং এর ক্ষেত্রেও সেম। অনেক সময় চাইল্ড ক্লাসের প্রোপার্টি আর প্যারেন্ট ক্লাসের প্রোপার্টি দুটোই দরকার হয়। তখন আমাদের কাজে লাগবে super() method

class Father:
    def __init__(self):
        print("Father constructor called")

class Child(Father):
    def __init__(self):
        super().__init__()
        print("Child constructor called")

c = Child()
c.show()
Father constructor called
Child constructor called
class A:
    def show(self):
        print("A class")

class B(A):
    def show(self):
        print("B class")
        super().show()

class C(A):
    def show(self):
        print("C class")
        super().show()

class D(B, C):
    def show(self):
        print("D class")
        super().show()

d = D()
d.show()
D class
B class
C class
A class

এখানে super().show() মেথড কল করার ফলে MRO অনুযায়ী তার সব প্যারেন্ট ক্লাসের show() মেথড কল করছে।

Advertisement
Advertisement
0

reactions

Login to Hashnode to react

Advertisement
Advertisement

Comments

Comments are managed on Hashnode. Join the discussion there!

You'll need a Hashnode account to comment. It's free and takes seconds to sign up!

Advertisement
Recommended Content

Related Posts

Let’s introduce with Object Oriented Programming

আমরা কম বেশি সবাই প্রোগ্রামিং শব্দটার সাথে পরিচিত তবে অবজেক্ট ওরিয়েন্টেড প্রোগ্রামিং এর ব্যাপারে কতজন জানি? বা জানলেও এটি আসলে কি তা সবাই হয়তো বুঝি না। তাই আজকে এই রহস্যময় জিনিসের সাথে পরিচয় করিয়ে দিতে যাচ্ছি। প্রোগ্রামিং ২ ভাবে করা যায়। একটা পদ্ধতি...

Ata Alahy NishanAta Alahy Nishan
5 min
Pythonoop
সাইবার সিকিউরিটিতে ক্যারিয়ার কিভাবে শুরু করবেন? জানুন বিশেষজ্ঞ আশরাফুল আলমের সাথে | Talk With CST Club Ep. 1

সাইবার সিকিউরিটিতে ক্যারিয়ার কিভাবে শুরু করবেন? জানুন বিশেষজ্ঞ আশরাফুল আলমের সাথে | Talk With CST Club Ep. 1

🔥 সাইবার সিকিউরিটি: শুধু চাকরি নয় — একটি মিশন চাকরি নয় — চ্যালেঞ্জ।ইনকাম নয় — ইমপ্যাক্ট। সাইবার সিকিউরিটি ক্যারিয়ারের জগতে পা রাখতে চাইলে আপনার হাতে শুধু স্কিল নয় — সঠিক গাইডলাইন, প্রেরণা, এবং প্র্যাকটিক্যাল রোডম্যাপ দরকার। আর সেই গাইডলাইন এবার...

CST ClubCST Club
2 min
#career in cybersecurity#freelancing in cybersecurity
Python Inheritance Part - 01

Python Inheritance Part - 01

Inheritance কি? Inhertitance হচ্ছে এমন এক পদ্ধতি যার মাধ্যমে একটি ক্লাসের প্রোপার্টি , মেথড অন্য কোন ক্লাসকে দেয়া যায়। এক্ষেত্রে যার থেকে ইনহেরিট করা হয়েছে তাকে বলে প্যারেন্ট ক্লাস এবং যার কাছে ইনহেরিট করা হয়েছে তাকে বলে চাইল্ড ক্লাস। Syntax of inher...

Ata Alahy NishanAta Alahy Nishan
4 min
hybrid-inherithierarchical-inheritance
Advertisement
Recommended Content