osdir.com


[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

How call method from a method in same class?


> On Apr 1, 2019, at 7:02 PM, Dave <dboland9 at offilive.com> wrote:
> 
> As classes get more complex, it is good to call a function to do some of the processing, and make the code easier to follow.  My question is how to do that?  I've attached some silly code to illustrate the point.  The error is: name 'validScale' is not defined.  Well, yes it is, but maybe not the correct way.  Suggestions?
> 
> Dave,
> 
> class TempConverter():
>    """ Temperature Converter converts a tempeature from one scale
>        to another scale.  For example: 32, F, C will return
>        0 degrees C
>    """
> 
>    def __init__(self, temperature, scale, newScale):
>        self.temperature = temperature
>        self.scale = scale
>        self.newScale = newScale
> 
>    def validScale(self, scaleName):
>        if scaleName.upper == 'F' or 'C' or 'K':
>            return True
>        else:
>            return False
> 
>    def convertTemp(self):
>        """ Converts temperature scale if scales valid."""
>        if validScale(self.scale):
>            scaleValid = True
>        if validScale(self.newScale):
>            newScaleValid = True
>        if scaleValid and newScaleValid:
>            print('Scale converted')
>        else:
>            msg = "There was and error with the scales entered.\n"
>            msg = msg + "You entered: " + self.scale
>            msg = msg + ' ' 'and' + self.newScale
>            print(msg)
> 
> if __name__ == "__main__":
>    myclass = TempConverter(32, 'f', 'c')
>    myclass.convertTemp()
> -- 
> https://mail.python.org/mailman/listinfo/python-list
> 

To answer your specific question, you call a method in the same class by calling:      self.methodName   For example:  self.validScale

However, once you fix that, you wind find that the if statement in that method is not built correctly.

Also, since the variable self.scale is already set in your __init__ method, there is no need to pass it into your function.  You could just use self.scale inside that method.

Irv