[Tutor] Class Tips
David
david at abbottdavid.com
Sun May 31 03:20:26 CEST 2009
Alan Gauld wrote:
>
> "David" <david at abbottdavid.com> wrote
>
>> I took this program that determines a fertilizer application rate;
>> ...
>> And converted it to class/object to learn how they work. Just looking
>> for some pointers, if I did it correctly etc.
>
> For such a small program its hard to see what else you could have done.
> Technically itys not too bad, I've made a couple of suggestions below.
> However, leaving the fact that its an excercise I'd say that really this
> is just a function rather than a class.
>
>> class FertRate:
>> def __init__(self, rate, nitrogen, acre, bag):
>> self.area = 43.560
>> self.app = rate / (nitrogen / 100.00)
>> self.acre = acre
>> self.bag = bag
>>
>> def result(self):
>> result = self.app * self.area * self.acre / self.bag
>> print 'You should apply %0.2f bags.' % result
>
> Its never a good idea to include printing in the same function as
> calculation. IT would be better to have two functions one to calculate
> and one to generate the printable output. (The actual printing is best
> done outside the class altogether, it improves the reusability. For
> example prints don't work in a GUI but a formatted string can be used.
>
> But even if you keep it as one function at lest return the result as a
> string rather than print it
>
>
>> def main():
>> rate, nitrogen, acre, bag = get_inputs()
>> frate = FertRate(rate, nitrogen, acre, bag)
>
> This could have just been:
>
> frate = FertRate( get_inputs() )
>
> which saves the need for the variables.
>
>> frate.result()
>
> So if you took my advice about returning a string this becomes
>
> print frate.result()
>
> But as I say you could just have made FertRate a function:
>
> print FertRate( get_inputs() )
>
> and it would have been just as effective, classes really only start to
> be useful on slightly larger programs than this.
>
>
> But as an example of using a class its nearly OK, just the tweak of the
> return value to think about - and that applies to the function version too!
>
>
Thanks Alan,
this works;
def main():
rate, nitrogen, acre, bag = get_inputs()
frate = FertRate(rate, nitrogen, acre, bag)
result = frate.result()
print 'You should apply %0.2f bags.' % result
but I get an error here;
def main():
frate = FertRate(get_inputs())
result = frate.result()
print 'You should apply %0.2f bags.' % result
Traceback (most recent call last):
File "./fert_class.py", line 26, in <module>
main()
File "./fert_class.py", line 15, in main
frate = FertRate(get_inputs())
TypeError: __init__() takes exactly 5 arguments (2 given)
--
Powered by Gentoo GNU/Linux
http://linuxcrazy.com
More information about the Tutor
mailing list