I have a small class hierarchy with similar methods and __init__(), but slightly different static (class) read() methods. Specifically will the child class need to prepare the file name a bit before reading (but the reading itself is the same):
class Foo:
def __init__(self, pars):
self.pars = pars
@classmethod
def read(cls, fname):
pars = some_method_to_read_the_file(fname)
return cls(pars)
class Bar(Foo):
@classmethod
def read(cls, fname):
fname0 = somehow_prepare_filename(fname)
return cls.__base__.read(fname0)
The problem here is that Bar.read(…) returns a Foo object, not a Bar object. How can I change the code so that an object of the correct class is returned?
cls.__base__.readbinds thereadmethod explicitly to the base class. You should usesuper().readinstead to bind thereadmethod of the parent class to the current class.Change:
to: