Skip to content
Advertisement

Python: Creating an object with more than two optional arguments

class Disease:
  def __init__(self, category, name, nicknames, sx, *labs, **inheritance):
    self.category = category
    self.name = name
    self.nicknames = nicknames
    self.sx = sx
    self.labs = labs  #incl. vitals
    self.inheritance = inheritance
  def printLabs(self):
    for item in self.labs:
      print(item)

This works fine, but when I try to initialize a Disease with three optional values, or with the optional value in the middle (ie nicknames), it doesn’t work.

Is there any way around these issues?

Advertisement

Answer

To make a value sometimes optional, you either have to pull it from *labs or **inheritance, or provide a default value such as:

class Disease:
  def __init__(self, category, name, nicknames=None, sx=None, *labs, **inheritance):

Now, if the user does not provide a value for nicknames, or sx, they remain as None.

Note: Optional (default) arguments like this must be at the end of the function declaration – meaning you cannot do something like def __init__(self, category, name=None, nicknames, sx, *labs, **inheritance) because after name, all arguments must have default values or else you’ll get a a SyntaxError.

User contributions licensed under: CC BY-SA
5 People found this is helpful
Advertisement