You have a program as follows:
class Location: def __init__(self, country="US", state="CA", city="Los Angeles"): self.country = country self.state = state self.city = city def printer(self): return [self.country, self.state, self.city] new_loc = Location("Mexico", "Mexico City", "Mexico City", "good neighborhood") print(new_loc.printer())
Here are your choices of what it could print out:
a. TypeError: init() takes from 1 to 4 positional arguments but 5 were given
b. TypeError: init() takes from 1 to 3 positional arguments but 4 were given
c. ['Mexico', 'Mexico City', 'Mexico City']
d. None of the above
Which one does it print?
Scroll down to see the answer.
A. The reason is that the class methods always pass the self when there are stanzas like this:
new_loc = Location("Mexico", "Mexico City", "Mexico City", "good neighborhood")
The self is invisible, but behind-the-scenes, it is there.
It accepts four positional arguments: country, state, city, and self. The line causing the error includes "good neighborhood". To read more about this, see this StackOverflow posting.
The arity of the __init__ constructor (in the class Location) is variable -- but passing four arguments is excessive. It can handle three explicit parameters as "self" is passed implicitly. Python will print out "__init__() takes from 1 to 4 positional arguments but 5 were given"