{"id":2743,"date":"2021-11-06T09:45:22","date_gmt":"2021-11-06T09:45:22","guid":{"rendered":"https:\/\/www.pythontutorial.net\/?page_id=2743"},"modified":"2025-03-30T12:09:15","modified_gmt":"2025-03-30T12:09:15","slug":"python-multiple-inheritance","status":"publish","type":"page","link":"https:\/\/www.pythontutorial.net\/python-oop\/python-multiple-inheritance\/","title":{"rendered":"Python Multiple Inheritance"},"content":{"rendered":"\n<p><strong>Summary<\/strong>: in this tutorial, you&#8217;ll learn about Python multiple inheritance and how method order resolution works in Python.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id='introduction-to-the-python-multiple-inheritance'>Introduction to the Python Multiple inheritance. <a href=\"#introduction-to-the-python-multiple-inheritance\" class=\"anchor\" id=\"introduction-to-the-python-multiple-inheritance\" title=\"Anchor for Introduction to the Python Multiple inheritance.\">#<\/a><\/h2>\n\n\n\n<p>When a <a href=\"https:\/\/www.pythontutorial.net\/python-oop\/python-class\/\">class<\/a> inherits from a single class, you have <a href=\"https:\/\/www.pythontutorial.net\/python-oop\/python-inheritance\/\">single inheritance<\/a>. Python allows a class to inherit from multiple classes. If a class inherits from two or more classes, you&#8217;ll have multiple inheritance.<\/p>\n\n\n\n<p>To extend multiple classes, you specify the parent classes inside the parentheses <code>()<\/code> after the class name of the child class like this:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-1\" data-shcb-language-name=\"Python\" data-shcb-language-slug=\"python\"><span><code class=\"hljs language-python\"><span class=\"hljs-class\"><span class=\"hljs-keyword\">class<\/span> <span class=\"hljs-title\">ChildClass<\/span><span class=\"hljs-params\">(ParentClass1, ParentClass2, ParentClass3)<\/span>:<\/span>\n   <span class=\"hljs-keyword\">pass<\/span><\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-1\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">Python<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">python<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>The syntax for multiple inheritance is similar to a parameter list in the class definition. Instead of including one parent class inside the parentheses, you include two or more classes, separated by a comma. <\/p>\n\n\n\n<p>Let&#8217;s take an example to understand how multiple inheritance works:<\/p>\n\n\n\n<p>First, define a class <code>Car<\/code> that has the <code>go()<\/code> method:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-2\" data-shcb-language-name=\"Python\" data-shcb-language-slug=\"python\"><span><code class=\"hljs language-python\"><span class=\"hljs-class\"><span class=\"hljs-keyword\">class<\/span> <span class=\"hljs-title\">Car<\/span>:<\/span>\n    <span class=\"hljs-function\"><span class=\"hljs-keyword\">def<\/span> <span class=\"hljs-title\">go<\/span><span class=\"hljs-params\">(self)<\/span>:<\/span>\n        print(<span class=\"hljs-string\">'Going'<\/span>)<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-2\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">Python<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">python<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>Second, define a class <code>Flyable<\/code> that has the <code>fly()<\/code> method:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-3\" data-shcb-language-name=\"Python\" data-shcb-language-slug=\"python\"><span><code class=\"hljs language-python\"><span class=\"hljs-class\"><span class=\"hljs-keyword\">class<\/span> <span class=\"hljs-title\">Flyable<\/span>:<\/span>\n    <span class=\"hljs-function\"><span class=\"hljs-keyword\">def<\/span> <span class=\"hljs-title\">fly<\/span><span class=\"hljs-params\">(self)<\/span>:<\/span>\n        print(<span class=\"hljs-string\">'Flying'<\/span>)<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-3\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">Python<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">python<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>Third, define the <code>FlyingCar<\/code> that inherits from both <code>Car<\/code> and <code>Flyable<\/code> classes:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-4\" data-shcb-language-name=\"Python\" data-shcb-language-slug=\"python\"><span><code class=\"hljs language-python\"><span class=\"hljs-class\"><span class=\"hljs-keyword\">class<\/span> <span class=\"hljs-title\">FlyingCar<\/span><span class=\"hljs-params\">(Flyable, Car)<\/span>:<\/span>\n    <span class=\"hljs-keyword\">pass<\/span><\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-4\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">Python<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">python<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>Since the <code>FlyingCar<\/code> inherits from <code>Car<\/code> and <code>Flyable<\/code> classes, it reuses the methods from those classes. It means you can call the <code>go()<\/code> and <code>fly()<\/code> methods on an instance of the <code>FlyingCar<\/code> class like this:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-5\" data-shcb-language-name=\"Python\" data-shcb-language-slug=\"python\"><span><code class=\"hljs language-python\"><span class=\"hljs-keyword\">if<\/span> __name__ == <span class=\"hljs-string\">'__main__'<\/span>:\n    fc = FlyingCar()\n    fc.go()\n    fc.fly()<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-5\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">Python<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">python<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>Output:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-6\" data-shcb-language-name=\"Python\" data-shcb-language-slug=\"python\"><span><code class=\"hljs language-python\">Going\nFlying<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-6\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">Python<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">python<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>Here&#8217;s the complete program:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-7\" data-shcb-language-name=\"Python\" data-shcb-language-slug=\"python\"><span><code class=\"hljs language-python\"><span class=\"hljs-class\"><span class=\"hljs-keyword\">class<\/span> <span class=\"hljs-title\">Car<\/span>:<\/span>\n    <span class=\"hljs-function\"><span class=\"hljs-keyword\">def<\/span> <span class=\"hljs-title\">go<\/span><span class=\"hljs-params\">(self)<\/span>:<\/span>\n        print(<span class=\"hljs-string\">'Going'<\/span>)\n\n<span class=\"hljs-class\"><span class=\"hljs-keyword\">class<\/span> <span class=\"hljs-title\">Flyable<\/span>:<\/span>\n    <span class=\"hljs-function\"><span class=\"hljs-keyword\">def<\/span> <span class=\"hljs-title\">fly<\/span><span class=\"hljs-params\">(self)<\/span>:<\/span>\n        print(<span class=\"hljs-string\">'Flying'<\/span>)        \n\n\n<span class=\"hljs-class\"><span class=\"hljs-keyword\">class<\/span> <span class=\"hljs-title\">FlyingCar<\/span><span class=\"hljs-params\">(Flyable, Car)<\/span>:<\/span>\n    <span class=\"hljs-keyword\">pass<\/span>\n\n<span class=\"hljs-keyword\">if<\/span> __name__ == <span class=\"hljs-string\">'__main__'<\/span>:\n    fc = FlyingCar()\n    fc.go()\n    fc.fly()<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-7\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">Python<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">python<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p><a href=\"https:\/\/www.pythontutorial.net\/playground\/?q=Y2xhc3MgQ2FyOgogICAgZGVmIGdvKHNlbGYpOgogICAgICAgIHByaW50KCdHb2luZycpCgpjbGFzcyBGbHlhYmxlOgogICAgZGVmIGZseShzZWxmKToKICAgICAgICBwcmludCgnRmx5aW5nJykgICAgICAgIAoKCmNsYXNzIEZseWluZ0NhcihGbHlhYmxlLCBDYXIpOgogICAgcGFzcwoKaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKICAgIGZjID0gRmx5aW5nQ2FyKCkKICAgIGZjLmdvKCkKICAgIGZjLmZseSgp\" target=\"_blank\" rel=\"noreferrer noopener\">Try it<\/a><\/p>\n\n\n\n<p>Output:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-8\" data-shcb-language-name=\"Python\" data-shcb-language-slug=\"python\"><span><code class=\"hljs language-python\">Going\nFlying<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-8\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">Python<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">python<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<h2 class=\"wp-block-heading\" id='method-resolution-order-mro'>Method resolution order (MRO) <a href=\"#method-resolution-order-mro\" class=\"anchor\" id=\"method-resolution-order-mro\" title=\"Anchor for Method resolution order (MRO)\">#<\/a><\/h2>\n\n\n\n<p>When the parent classes have methods with the same name and the child class calls the method, Python uses the method resolution order (MRO) to search for the right method to call. Consider the following example:<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"333\" height=\"234\" src=\"https:\/\/www.pythontutorial.net\/wp-content\/uploads\/2021\/11\/Python-Multiple-Inhertiance-MRO.png\" alt=\"\" class=\"wp-image-2746\" srcset=\"https:\/\/www.pythontutorial.net\/wp-content\/uploads\/2021\/11\/Python-Multiple-Inhertiance-MRO.png 333w, https:\/\/www.pythontutorial.net\/wp-content\/uploads\/2021\/11\/Python-Multiple-Inhertiance-MRO-300x211.png 300w\" sizes=\"auto, (max-width: 333px) 100vw, 333px\" \/><\/figure>\n\n\n\n<p>First, add the <code>start()<\/code> method to the <code>Car<\/code>, <code>Flyable<\/code>, and <code>FlyingCar<\/code> classes. In the <code>start()<\/code> method of the <code>FlyingCar<\/code> class, call the <code>start()<\/code> method of the <code>super()<\/code>:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-9\" data-shcb-language-name=\"Python\" data-shcb-language-slug=\"python\"><span><code class=\"hljs language-python\"><span class=\"hljs-class\"><span class=\"hljs-keyword\">class<\/span> <span class=\"hljs-title\">Car<\/span>:<\/span>\n    <span class=\"hljs-function\"><span class=\"hljs-keyword\">def<\/span> <span class=\"hljs-title\">start<\/span><span class=\"hljs-params\">(self)<\/span>:<\/span>\n        print(<span class=\"hljs-string\">'Start the Car'<\/span>)\n\n    <span class=\"hljs-function\"><span class=\"hljs-keyword\">def<\/span> <span class=\"hljs-title\">go<\/span><span class=\"hljs-params\">(self)<\/span>:<\/span>\n        print(<span class=\"hljs-string\">'Going'<\/span>)\n\n\n<span class=\"hljs-class\"><span class=\"hljs-keyword\">class<\/span> <span class=\"hljs-title\">Flyable<\/span>:<\/span>\n    <span class=\"hljs-function\"><span class=\"hljs-keyword\">def<\/span> <span class=\"hljs-title\">start<\/span><span class=\"hljs-params\">(self)<\/span>:<\/span>\n        print(<span class=\"hljs-string\">'Start the Flyable object'<\/span>)\n\n    <span class=\"hljs-function\"><span class=\"hljs-keyword\">def<\/span> <span class=\"hljs-title\">fly<\/span><span class=\"hljs-params\">(self)<\/span>:<\/span>\n        print(<span class=\"hljs-string\">'Flying'<\/span>)\n\n\n<span class=\"hljs-class\"><span class=\"hljs-keyword\">class<\/span> <span class=\"hljs-title\">FlyingCar<\/span><span class=\"hljs-params\">(Flyable, Car)<\/span>:<\/span>\n    <span class=\"hljs-function\"><span class=\"hljs-keyword\">def<\/span> <span class=\"hljs-title\">start<\/span><span class=\"hljs-params\">(self)<\/span>:<\/span>\n        super().start()<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-9\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">Python<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">python<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>Second, create an instance of the <code>FlyingCar<\/code> class and call the <code>start()<\/code> method:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-10\" data-shcb-language-name=\"Python\" data-shcb-language-slug=\"python\"><span><code class=\"hljs language-python\"><span class=\"hljs-keyword\">if<\/span> __name__ == <span class=\"hljs-string\">'__main__'<\/span>:\n    car = FlyingCar()\n    car.start()<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-10\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">Python<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">python<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>Output:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-11\" data-shcb-language-name=\"Python\" data-shcb-language-slug=\"python\"><span><code class=\"hljs language-python\">Start the Flyable object<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-11\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">Python<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">python<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>The output indicates that the <code>super().start()<\/code> calls the <code>start()<\/code> method of the <code>Flyable<\/code> class.<\/p>\n\n\n\n<p>The following shows the <code>__mro__<\/code> of the <code>FlyingCar<\/code> class:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-12\" data-shcb-language-name=\"Python\" data-shcb-language-slug=\"python\"><span><code class=\"hljs language-python\">print(FlyingCar.__mro__)<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-12\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">Python<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">python<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>Output:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-13\" data-shcb-language-name=\"Python\" data-shcb-language-slug=\"python\"><span><code class=\"hljs language-python\">(&lt;<span class=\"hljs-class\"><span class=\"hljs-keyword\">class<\/span> '<span class=\"hljs-title\">__main__<\/span>.<span class=\"hljs-title\">FlyingCar<\/span>'&gt;, &lt;<span class=\"hljs-title\">class<\/span> '<span class=\"hljs-title\">__main__<\/span>.<span class=\"hljs-title\">Flyable<\/span>'&gt;, &lt;<span class=\"hljs-title\">class<\/span> '<span class=\"hljs-title\">__main__<\/span>.<span class=\"hljs-title\">Car<\/span>'&gt;, &lt;<span class=\"hljs-title\">class<\/span> '<span class=\"hljs-title\">object<\/span>'&gt;)<\/span><\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-13\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">Python<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">python<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>From left to right, you&#8217;ll see the <code>FlyingCar<\/code>, <code>Flyable<\/code>, <code>Car<\/code>, and <code>object<\/code>.<\/p>\n\n\n\n<p>Note that the <code>Car<\/code> and <code>Flyable<\/code> objects inherit from the <code>object<\/code> class implicitly. When you call the <code>start()<\/code> method from the <code>FlyingCar<\/code>&#8216;s object, Python uses the <code>__mro__<\/code> class search path.<\/p>\n\n\n\n<p>Since the <code>Flyable<\/code> class is next to the <code>FlyingCar<\/code> class, the <code>super().start()<\/code> calls the <code>start()<\/code> method of the <code>FlyingCar<\/code> class.<\/p>\n\n\n\n<p>If you flip the order of <code>Flyable<\/code> and <code>Car<\/code> classes in the list, the <code>__mro__<\/code> will change accordingly. For example:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-14\" data-shcb-language-name=\"Python\" data-shcb-language-slug=\"python\"><span><code class=\"hljs language-python\"><span class=\"hljs-comment\"># Car, Flyable classes...<\/span>\n\n\n<span class=\"hljs-class\"><span class=\"hljs-keyword\">class<\/span> <span class=\"hljs-title\">FlyingCar<\/span><span class=\"hljs-params\">(Car, Flyable)<\/span>:<\/span>\n    <span class=\"hljs-function\"><span class=\"hljs-keyword\">def<\/span> <span class=\"hljs-title\">start<\/span><span class=\"hljs-params\">(self)<\/span>:<\/span>\n        super().start()\n\n\n<span class=\"hljs-keyword\">if<\/span> __name__ == <span class=\"hljs-string\">'__main__'<\/span>:\n    car = FlyingCar()\n    car.start()\n\n    print(FlyingCar.__mro__)<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-14\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">Python<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">python<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>Output:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-15\" data-shcb-language-name=\"Python\" data-shcb-language-slug=\"python\"><span><code class=\"hljs language-python\">Start the Car\n(&lt;<span class=\"hljs-class\"><span class=\"hljs-keyword\">class<\/span> '<span class=\"hljs-title\">__main__<\/span>.<span class=\"hljs-title\">FlyingCar<\/span>'&gt;, &lt;<span class=\"hljs-title\">class<\/span> '<span class=\"hljs-title\">__main__<\/span>.<span class=\"hljs-title\">Car<\/span>'&gt;, &lt;<span class=\"hljs-title\">class<\/span> '<span class=\"hljs-title\">__main__<\/span>.<span class=\"hljs-title\">Flyable<\/span>'&gt;, &lt;<span class=\"hljs-title\">class<\/span> '<span class=\"hljs-title\">object<\/span>'&gt;)<\/span><\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-15\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">Python<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">python<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>In this example, the <code>super().start()<\/code> calls the <code>start()<\/code> method of the <code>Car<\/code> class instead, based on their orders in the method order resolution.<\/p>\n\n\n\n<p>Here&#8217;s the complete program:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-16\" data-shcb-language-name=\"Python\" data-shcb-language-slug=\"python\"><span><code class=\"hljs language-python\"><span class=\"hljs-class\"><span class=\"hljs-keyword\">class<\/span> <span class=\"hljs-title\">Car<\/span>:<\/span>\n    <span class=\"hljs-function\"><span class=\"hljs-keyword\">def<\/span> <span class=\"hljs-title\">start<\/span><span class=\"hljs-params\">(self)<\/span>:<\/span>\n        print(<span class=\"hljs-string\">'Start the Car'<\/span>)\n\n    <span class=\"hljs-function\"><span class=\"hljs-keyword\">def<\/span> <span class=\"hljs-title\">go<\/span><span class=\"hljs-params\">(self)<\/span>:<\/span>\n        print(<span class=\"hljs-string\">'Going'<\/span>)\n\n\n<span class=\"hljs-class\"><span class=\"hljs-keyword\">class<\/span> <span class=\"hljs-title\">Flyable<\/span>:<\/span>\n    <span class=\"hljs-function\"><span class=\"hljs-keyword\">def<\/span> <span class=\"hljs-title\">start<\/span><span class=\"hljs-params\">(self)<\/span>:<\/span>\n        print(<span class=\"hljs-string\">'Start the Flyable object'<\/span>)\n\n    <span class=\"hljs-function\"><span class=\"hljs-keyword\">def<\/span> <span class=\"hljs-title\">fly<\/span><span class=\"hljs-params\">(self)<\/span>:<\/span>\n        print(<span class=\"hljs-string\">'Flying'<\/span>)\n\n\n<span class=\"hljs-class\"><span class=\"hljs-keyword\">class<\/span> <span class=\"hljs-title\">FlyingCar<\/span><span class=\"hljs-params\">(Flyable, Car)<\/span>:<\/span>\n    <span class=\"hljs-function\"><span class=\"hljs-keyword\">def<\/span> <span class=\"hljs-title\">start<\/span><span class=\"hljs-params\">(self)<\/span>:<\/span>\n        super().start()\n        \n<span class=\"hljs-keyword\">if<\/span> __name__ == <span class=\"hljs-string\">'__main__'<\/span>:\n    car = FlyingCar()\n    car.start()    \n    print(FlyingCar.__mro__)\n    \n   <\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-16\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">Python<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">python<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p><a href=\"https:\/\/www.pythontutorial.net\/playground\/?q=Y2xhc3MgQ2FyOgogICAgZGVmIHN0YXJ0KHNlbGYpOgogICAgICAgIHByaW50KCdTdGFydCB0aGUgQ2FyJykKCiAgICBkZWYgZ28oc2VsZik6CiAgICAgICAgcHJpbnQoJ0dvaW5nJykKCgpjbGFzcyBGbHlhYmxlOgogICAgZGVmIHN0YXJ0KHNlbGYpOgogICAgICAgIHByaW50KCdTdGFydCB0aGUgRmx5YWJsZSBvYmplY3QnKQoKICAgIGRlZiBmbHkoc2VsZik6CiAgICAgICAgcHJpbnQoJ0ZseWluZycpCgoKY2xhc3MgRmx5aW5nQ2FyKEZseWFibGUsIENhcik6CiAgICBkZWYgc3RhcnQoc2VsZik6CiAgICAgICAgc3VwZXIoKS5zdGFydCgpCiAgICAgICAgCmlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CiAgICBjYXIgPSBGbHlpbmdDYXIoKQogICAgY2FyLnN0YXJ0KCkgICAgCiAgICBwcmludChGbHlpbmdDYXIuX19tcm9fXyk%3D\" target=\"_blank\" rel=\"noreferrer noopener\">Try it<\/a><\/p>\n\n\n\n<p>Output:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-17\" data-shcb-language-name=\"Python\" data-shcb-language-slug=\"python\"><span><code class=\"hljs language-python\">Start the Flyable object\n(&lt;<span class=\"hljs-class\"><span class=\"hljs-keyword\">class<\/span> '<span class=\"hljs-title\">__main__<\/span>.<span class=\"hljs-title\">FlyingCar<\/span>'&gt;, &lt;<span class=\"hljs-title\">class<\/span> '<span class=\"hljs-title\">__main__<\/span>.<span class=\"hljs-title\">Flyable<\/span>'&gt;, &lt;<span class=\"hljs-title\">class<\/span> '<span class=\"hljs-title\">__main__<\/span>.<span class=\"hljs-title\">Car<\/span>'&gt;, &lt;<span class=\"hljs-title\">class<\/span> '<span class=\"hljs-title\">object<\/span>'&gt;)<\/span><\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-17\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">Python<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">python<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<h2 class=\"wp-block-heading\" id='multiple-inheritance-super'>Multiple inheritance &amp; super <a href=\"#multiple-inheritance-super\" class=\"anchor\" id=\"multiple-inheritance-super\" title=\"Anchor for Multiple inheritance &amp; super\">#<\/a><\/h2>\n\n\n\n<p>First, add the <code>__init__<\/code> method to the <code>Car<\/code> class:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-18\" data-shcb-language-name=\"Python\" data-shcb-language-slug=\"python\"><span><code class=\"hljs language-python\"><span class=\"hljs-class\"><span class=\"hljs-keyword\">class<\/span> <span class=\"hljs-title\">Car<\/span>:<\/span>\n    <span class=\"hljs-function\"><span class=\"hljs-keyword\">def<\/span> <span class=\"hljs-title\">__init__<\/span><span class=\"hljs-params\">(self, door, wheel)<\/span>:<\/span>\n        self.door = door\n        self.wheel = wheel\n\n    <span class=\"hljs-function\"><span class=\"hljs-keyword\">def<\/span> <span class=\"hljs-title\">start<\/span><span class=\"hljs-params\">(self)<\/span>:<\/span>\n        print(<span class=\"hljs-string\">'Start the Car'<\/span>)\n\n    <span class=\"hljs-function\"><span class=\"hljs-keyword\">def<\/span> <span class=\"hljs-title\">go<\/span><span class=\"hljs-params\">(self)<\/span>:<\/span>\n        print(<span class=\"hljs-string\">'Going'<\/span>)<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-18\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">Python<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">python<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>Second, add the <code>__init__<\/code> method to the <code>Flyable<\/code> class:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-19\" data-shcb-language-name=\"Python\" data-shcb-language-slug=\"python\"><span><code class=\"hljs language-python\"><span class=\"hljs-class\"><span class=\"hljs-keyword\">class<\/span> <span class=\"hljs-title\">Flyable<\/span>:<\/span>\n    <span class=\"hljs-function\"><span class=\"hljs-keyword\">def<\/span> <span class=\"hljs-title\">__init__<\/span><span class=\"hljs-params\">(self, wing)<\/span>:<\/span>\n        self.wing = wing\n\n    <span class=\"hljs-function\"><span class=\"hljs-keyword\">def<\/span> <span class=\"hljs-title\">start<\/span><span class=\"hljs-params\">(self)<\/span>:<\/span>\n        print(<span class=\"hljs-string\">'Start the Flyable object'<\/span>)\n\n    <span class=\"hljs-function\"><span class=\"hljs-keyword\">def<\/span> <span class=\"hljs-title\">fly<\/span><span class=\"hljs-params\">(self)<\/span>:<\/span>\n        print(<span class=\"hljs-string\">'Flying'<\/span>)<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-19\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">Python<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">python<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>The <code>__init__<\/code> of the <code>Car<\/code> and <code>Flyable<\/code> classes accept a different number of parameters. If the <code>FlyingCar<\/code> class inherits from the <code>Car<\/code> and <code>Flyable<\/code> classes, its <code>__init__<\/code> method needs to call the right <code>__init__<\/code> method specified in the method order resolution <code>__mro__<\/code> of the <code>FlyingCar<\/code> class.<\/p>\n\n\n\n<p>Third, add the <code>__init__<\/code> method to the <code>FlyingCar<\/code> class:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-20\" data-shcb-language-name=\"Python\" data-shcb-language-slug=\"python\"><span><code class=\"hljs language-python\"><span class=\"hljs-class\"><span class=\"hljs-keyword\">class<\/span> <span class=\"hljs-title\">FlyingCar<\/span><span class=\"hljs-params\">(Flyable, Car)<\/span>:<\/span>\n    <span class=\"hljs-function\"><span class=\"hljs-keyword\">def<\/span> <span class=\"hljs-title\">__init__<\/span><span class=\"hljs-params\">(self, door, wheel, wing)<\/span>:<\/span>\n        super().__init__(wing=wing)\n        self.door = door\n        self.wheel = wheel\n\n    <span class=\"hljs-function\"><span class=\"hljs-keyword\">def<\/span> <span class=\"hljs-title\">start<\/span><span class=\"hljs-params\">(self)<\/span>:<\/span>\n        super().start()<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-20\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">Python<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">python<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>The method order resolution of the <code>FlyingCar<\/code> class is:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-21\" data-shcb-language-name=\"Python\" data-shcb-language-slug=\"python\"><span><code class=\"hljs language-python\">(&lt;<span class=\"hljs-class\"><span class=\"hljs-keyword\">class<\/span> '<span class=\"hljs-title\">__main__<\/span>.<span class=\"hljs-title\">FlyingCar<\/span>'&gt;, &lt;<span class=\"hljs-title\">class<\/span> '<span class=\"hljs-title\">__main__<\/span>.<span class=\"hljs-title\">Flyable<\/span>'&gt;, &lt;<span class=\"hljs-title\">class<\/span> '<span class=\"hljs-title\">__main__<\/span>.<span class=\"hljs-title\">Car<\/span>'&gt;, &lt;<span class=\"hljs-title\">class<\/span> '<span class=\"hljs-title\">object<\/span>'&gt;)<\/span><\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-21\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">Python<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">python<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>the <code>super().__init__()<\/code> calls the <code>__init__<\/code> of the <code>FlyingCar<\/code> class. Therefore, you need to pass the <code>wing<\/code> argument to the <code>__init__<\/code> method.<\/p>\n\n\n\n<p>If you don&#8217;t call <code>super().__init__()<\/code> in the <code>FlyingCar<\/code> class, it will not be able to initialize <code>door<\/code> and <code>wheel<\/code> attributes from the <code>Car<\/code> class, leading to a potential error.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id='summary'>Summary <a href=\"#summary\" class=\"anchor\" id=\"summary\" title=\"Anchor for Summary\">#<\/a><\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Python multiple inheritance allows one class to inherit from multiple classes.<\/li>\n\n\n\n<li>The method order resolution defines the class search path to find the method to call.<\/li>\n<\/ul>\n<div class=\"helpful-block-content\" data-title=\"\">\n\t<header>\n\t\t<div class=\"wth-question\">Was this tutorial helpful ?<\/div>\n\t\t<div class=\"wth-thumbs\">\n\t\t\t<button\n\t\t\t\tdata-post=\"2743\"\n\t\t\t\tdata-post-url=\"https:\/\/www.pythontutorial.net\/python-oop\/python-multiple-inheritance\/\"\n\t\t\t\tdata-post-title=\"Python Multiple Inheritance\"\n\t\t\t\tdata-response=\"1\"\n\t\t\t\tclass=\"wth-btn-rounded wth-yes-btn\"\n\t\t\t>\n\t\t\t\t<svg\n\t\t\t\t\txmlns=\"http:\/\/www.w3.org\/2000\/svg\"\n\t\t\t\t\tviewBox=\"0 0 24 24\"\n\t\t\t\t\tfill=\"none\"\n\t\t\t\t\tstroke=\"currentColor\"\n\t\t\t\t\tstroke-width=\"2\"\n\t\t\t\t\tstroke-linecap=\"round\"\n\t\t\t\t\tstroke-linejoin=\"round\"\n\t\t\t\t\tclass=\"feather feather-thumbs-up block w-full h-full\"\n\t\t\t\t>\n\t\t\t\t\t<path\n\t\t\t\t\t\td=\"M14 9V5a3 3 0 0 0-3-3l-4 9v11h11.28a2 2 0 0 0 2-1.7l1.38-9a2 2 0 0 0-2-2.3zM7 22H4a2 2 0 0 1-2-2v-7a2 2 0 0 1 2-2h3\"\n\t\t\t\t\t><\/path>\n\t\t\t\t<\/svg>\n\t\t\t\t<span class=\"sr-only\"> Yes <\/span>\n\t\t\t<\/button>\n\n\t\t\t<button\n\t\t\t\tdata-response=\"0\"\n\t\t\t\tdata-post=\"2743\"\n\t\t\t\tdata-post-url=\"https:\/\/www.pythontutorial.net\/python-oop\/python-multiple-inheritance\/\"\n\t\t\t\tdata-post-title=\"Python Multiple Inheritance\"\n\t\t\t\tclass=\"wth-btn-rounded wth-no-btn\"\n\t\t\t>\n\t\t\t\t<svg\n\t\t\t\t\txmlns=\"http:\/\/www.w3.org\/2000\/svg\"\n\t\t\t\t\tviewBox=\"0 0 24 24\"\n\t\t\t\t\tfill=\"none\"\n\t\t\t\t\tstroke=\"currentColor\"\n\t\t\t\t\tstroke-width=\"2\"\n\t\t\t\t\tstroke-linecap=\"round\"\n\t\t\t\t\tstroke-linejoin=\"round\"\n\t\t\t\t>\n\t\t\t\t\t<path\n\t\t\t\t\t\td=\"M10 15v4a3 3 0 0 0 3 3l4-9V2H5.72a2 2 0 0 0-2 1.7l-1.38 9a2 2 0 0 0 2 2.3zm7-13h2.67A2.31 2.31 0 0 1 22 4v7a2.31 2.31 0 0 1-2.33 2H17\"\n\t\t\t\t\t><\/path>\n\t\t\t\t<\/svg>\n\t\t\t\t<span class=\"sr-only\"> No <\/span>\n\t\t\t<\/button>\n\t\t<\/div>\n\t<\/header>\n\n\t<div class=\"wth-form hidden\">\n\t\t<div class=\"wth-form-wrapper\">\n\t\t\t<div class=\"wth-title\"><\/div>\n\t\t\t<textarea class=\"wth-message\"><\/textarea>\n\t\t\t<input type=\"button\" name=\"wth-submit\" class=\"wth-btn wth-btn-submit\" id=\"wth-submit\" \/>\n\t\t\t<input type=\"button\" class=\"wth-btn wth-btn-cancel\" value=\"Cancel\" \/>\n\t\t<\/div>\n\t<\/div>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>Summary: in this tutorial, you&#8217;ll learn about Python multiple inheritance and how method order resolution works in Python. Introduction to the Python Multiple inheritance. # When a class inherits from a single class, you have single inheritance. Python allows a class to inherit from multiple classes. If a class inherits from two or more classes, [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":417,"menu_order":36,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"class_list":["post-2743","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/www.pythontutorial.net\/wp-json\/wp\/v2\/pages\/2743","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.pythontutorial.net\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/www.pythontutorial.net\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/www.pythontutorial.net\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.pythontutorial.net\/wp-json\/wp\/v2\/comments?post=2743"}],"version-history":[{"count":3,"href":"https:\/\/www.pythontutorial.net\/wp-json\/wp\/v2\/pages\/2743\/revisions"}],"predecessor-version":[{"id":7229,"href":"https:\/\/www.pythontutorial.net\/wp-json\/wp\/v2\/pages\/2743\/revisions\/7229"}],"up":[{"embeddable":true,"href":"https:\/\/www.pythontutorial.net\/wp-json\/wp\/v2\/pages\/417"}],"wp:attachment":[{"href":"https:\/\/www.pythontutorial.net\/wp-json\/wp\/v2\/media?parent=2743"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}