pythonclassderived

Python: Call derived class method from another class


I have searched all the related this stackoverflow question but its not satisfied my issue.

BaseHandler.py

class BaseHandler(object):

    def __init__(self, rHandler, path, param):
            self._rHandler = rHandler
            self._server = self._rHandler.server
            self._path = path
            self._param = param

    def _getElement(self, name):
        return name + "append"

MyClass.py

class MyClass(BaseHandler.BaseHandler):

    def getA(self):
        print "Some info"

    def getB(self):
        el = self._getElement("T") #baseclass method
        print ebl

I wanted to call getB from the below class.

RThread.py

import MyClass
class RThread(object):

    def someMethod(self):
        clr = MyClass.MyClass
        clr.getB()

I am getting the following error:

TypeError: unbound method getB() must be called with MyClass instance as first argument (got nothing instead)

When I try the following:

clr = MyClass.MyClass()

I am getting the following error:

init() takes exactly 4 arguments (1 given)

So kindly help me how to call this method from different class.


Solution

  • You need to instantiate the class in order to call a method on it.

    def someMethod(self):
        clr = MyClass.MyClass(*args)
        clr.getB()
    

    In the case you want the method to be callable from the class you need to use either @staticmethod or @classmethod

    @staticmethod
    def getB():
        return self._getElement("T")
    

    However, you are using the self. notation which requires an instance. So you would need to flag the _getElement method with @staticmethod as well. Static methods do not have access to the parent class. You can use the @classmethod decorator to do so.

    @classmethod
    def getB(cls):
        return cls._getElement("T")