Bottom Page

Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
 Why Can't I call base class function for my derived class object?
#1
Hi experts!
Any idea if I am making an error in my code as I am not able to understand Why Can't I call the the base class function for my derived class object?
class My_base_class():
    def __init__(self):
        print("This is __init__function of Base Class")
    def base_class_func1(self):
        print("my base class function")
    def base_class_func2(self):
        print("my base class function # 2")     
       
class My_derived_class():
    def __init__(self):
        My_base_class.__init__(self)
        print("I am inside my __init__function of my Drived Class")
    def base_class_func1(self):
        print("my base class function")    
    def derived_class_func1(self):
        print("I am inside my derived class function 01")
        
my_inherit=My_derived_class()
my_inherit.base_class_func2()# I get error while I call function of base class.
Error:'My_derived_class' object has no attribute 'base_class_func2'
Quote
#2
class My_base_class():
    def __init__(self):
        print("This is __init__function of Base Class")
    def base_class_func1(self):
        print("my base class function")
    def base_class_func2(self):
        print("my base class function # 2")     
        
class My_derived_class(My_base_class):
    def __init__(self):
        My_base_class.__init__(self)
        print("I am inside my __init__function of my Drived Class")
    def base_class_func1(self):
        print("my base class function")    
    def derived_class_func1(self):
        print("I am inside my derived class function 01")
         
my_inherit=My_derived_class()
my_inherit.base_class_func2()# I get error while I call function of base class.
Quote
#3
To fix and update some stuff Wink
It not a function when it has self,then is a method that belong to the class.
Start using super(),and look at PEP-8
class BaseClass:
    def __init__(self):
        print("This is __init__method of Base Class")

    def base_method1(self):
        print("Only work in Base class <overridden> in DerivedClass")

    def base_method2(self):
        print("my base class method # 2")

class DerivedClass(BaseClass):
    def __init__(self):
        super().__init__()
        print("I am inside my __init__method of my Drived Class")

    def base_method1(self):
        print("DerivedClass class method")

    def derived_method1(self):
        print("I am inside my derived class method 01")

my_inherit = DerivedClass()
my_inherit.base_method2() 
Output:
This is __init__method of Base Class I am inside my __init__method of my Drived Class my base class method # 2

To take a little about Method overriding,which can be confusing.
See my comment Only work in Base class <overridden> in DerivedClass
So using DerivedClass will base_method1 in BaseClass has no functions as is overridden.

To show a example where both method has same name,but we as add information about date.
This can be called pre-filtering and post-filtering if doing method overriding.
from datetime import datetime

class BaseClass():
    def __init__(self):
        print("This is __init__method of Base Class")

    def base_method1(self, message):
        print(f'base_method1 say {message}')

    def base_method2(self):
        print("My base class method # 2")

class DerivedClass(BaseClass):
    def __init__(self):
        super().__init__()
        print("I am inside my __init__method of my Drived Class")

    def base_method1(self, message):
        date_info = f'at time {datetime.now():%B %d, %Y}'
        super().base_method1(f'{message} {date_info}')

    def derived_method1(self):
        print("I am inside my derived class method 01")

my_inherit = DerivedClass()
my_inherit.base_method2()
Use:
>>> obj = BaseClass()
This is __init__method of Base Class

>>> obj.base_method1('hello')
base_method1 say hello
Now using same base_method1 from DerivedClass,it will add info about date.
>>> obj = DerivedClass()
This is __init__method of Base Class
I am inside my __init__method of my Drived Class

>>> obj.base_method1('hello')
base_method1 say hello at time February 13, 2019
Quote

Top Page

Possibly Related Threads...
Thread Author Replies Views Last Post
  accessing local variable outside class priyanka08 3 127 Sep-24-2019, 10:00 AM
Last Post: buran
  How to serialize custom class objects in JSON? Exsul1 4 174 Sep-23-2019, 08:27 AM
Last Post: wavic
  Python complains that class instance is not defined colt 3 161 Sep-17-2019, 12:32 AM
Last Post: ichabod801
  How do I write class objects to a file in binary mode? Exsul1 7 399 Sep-14-2019, 09:33 PM
Last Post: snippsat
  Call method from another method within a class anteboy65 3 112 Sep-11-2019, 08:40 PM
Last Post: Larz60+
  How to call function SriRajesh 1 107 Sep-09-2019, 05:13 PM
Last Post: ichabod801
  My class has name error message 357mag 3 124 Sep-04-2019, 03:29 PM
Last Post: snippsat
  Appending a list in a class from a callback function snizbatch 5 183 Sep-01-2019, 06:27 AM
Last Post: snizbatch
  class returns NoneType Object istemihan 0 121 Aug-12-2019, 11:47 AM
Last Post: istemihan
  class random var write to array storzo 5 218 Aug-02-2019, 03:26 PM
Last Post: storzo

Forum Jump:


Users browsing this thread: 1 Guest(s)