cloudstack-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Tutkowski, Mike" <Mike.Tutkow...@netapp.com>
Subject Re: Python Question (with regards to Marvin)
Date Sat, 30 Apr 2016 19:31:26 GMT
Will - You can override a method in Python, but can you overload it?

http://stackoverflow.com/questions/10202938/how-do-i-use-method-overloading-in-python

> On Apr 30, 2016, at 6:23 AM, Will Stevens <williamstevens@gmail.com> wrote:
> 
> 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.Tutkowski@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
>> 
>> 
>> 

Mime
View raw message