Here is a pretty good explanation. http://stackoverflow.com/questions/136097/what-is-the-difference-between-staticmethod-and-classmethod-in-python
I am guessing that both exist because the function is called both with a host instance and with the class itself. Class instance example: `h.enableMaintenance(client)` Class example: `Host.enableMaintenance(client, 1)` In both cases the first parameter is implicitly `h` and `Host` respectively. I am not sure why we need both (because I am not familiar with how this code is called), but method overloading is definitely valid in python. On Apr 30, 2016 1:08 AM, "Tutkowski, Mike" <mike.tutkow...@netapp.com> wrote: > > Hi everyone, > > > I received an error when trying to invoke the instance version of enableMaintenance (below). > > > 'TypeError: enableMaintenance() takes exactly 3 arguments (2 given)\n'] > > > I looked at base.py and it has the following with regards to maintenance mode for hosts: > > > def enableMaintenance(self, apiclient): > > """enables maintenance mode Host""" > > > cmd = prepareHostForMaintenance.prepareHostForMaintenanceCmd() > > cmd.id = self.id > > return apiclient.prepareHostForMaintenance(cmd) > > > @classmethod > > def enableMaintenance(cls, apiclient, id): > > """enables maintenance mode Host""" > > > cmd = prepareHostForMaintenance.prepareHostForMaintenanceCmd() > > cmd.id = id > > return apiclient.prepareHostForMaintenance(cmd) > > > Now, I definitely have a lot more Java experience than Python, but - as far as I know - having two methods with the same name such as this (even if one is an instance method and the other is a class method) is not really "permitted" in Python. > > > I mean, technically it's permitted, but the second one will override the first one. > > > Can any of our Python people comment on this? > > > I was thinking I'd remove the class method (assuming my knowledge here regarding this topic is correct). > > > Thanks! > > Mike > > >