If I have a class hierarchy and use it like follows, including a third-party subclass that I can't change
class Base:
def doit(self):
pass
class Sub(Base):
def doit(self):
print('hi')
class SubInThirdPartyLibrary(Base):
def doit(self):
print('hi from library')
def doit(x: Base):
x.doit()
doit(Sub())
doit(SubInThirdPartyLibrary())
Is there any way I can add an optional parameter to the base class, use that in the subclass, without breaking the third-party class?
class Base:
def doit(self, msg: str = 'hi'):
pass
class Sub(Base):
def doit(self, msg: str = 'hi'):
print(msg)
class SubInThirdPartyLibrary(Base):
def doit(self): # This isn't mine, I can't add the parameter here but want it to keep working.
print('hi from library')
def doit(x: Base):
x.doit(hi='hello')
doit(Sub())
doit(SubInThirdPartyLibrary()) # TypeError: doit() takes 1 positional argument but 2 were given
SubInThirdPartyLibraryrelies on.SubInThirdPartyLibrary.doitfrom anywhere after the import of the module. The function has to accept aselfargument then, just like a class's method.functools.singledispatchondoit