Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

323
Views
Add optional param to base class function, ignore in subclass

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
over 4 years ago · Santiago Trujillo
1 answers
Answer question

0

You can use inspect.signature:

import inspect

def doit(x: Base):
    sig = inspect.signature(x.doit)
    if 'msg' in sig.parameters:
        x.doit(msg='hello')
    else:
        x.doit()

I would recommend against doing this, and instead try another solution.

over 4 years ago · Santiago Trujillo Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!