Which coding style is better? public API or private method inside class definition

Jean-Michel Pichavant jeanmichel at sequans.com
Wed Jan 5 10:18:22 EST 2011


Inyeol wrote:
> For example: I'm writing simple class:
>
>     class Numbers:
>         def __init__(self, numbers):
>             self._numbers = numbers
>         def get_all(self):
>             for number in self._numbers:
>                 yield number
>
> If I want to add another method for yielding even numbers only, I may
> use:
>
>         def get_even(self):
>             for numbers in self._numbers:
>                 if numbers % 2 == 0:
>                     yield number
>
> or, I can use public method 'get_all' instead of using private
> attribute '_numbers', like:
>
>         def get_even(self):
>             for numbers in self.get_all():
>                 if numbers % 2 == 0:
>                     yield number
>
> Which coding style do you prefer? I'm more toward public API way,
> since it requires less code change if I refactor private data
> structure later.
> Plz give pros and cons of these.
>   
- Unless you already know that you'll need to refactor the structure 
later, there's no need to anticipate => unnecessary optimization

- Using public API deos not necessarily make refactoring easier.
Let me explain, public APIs are meant to be called by external objects. 
These APIs may need to do some things that internal computing doesn't.
For instance, let's say you add a logging statement in the get_all() 
method. Every call triggers a log entry. Does the get_even method want 
to log this call ? Maybe not. In that particular case, using the 
internal strucutre is preferable.

- If you agree to the statement that readability > edition, then you 
should care more about writing clean and concise code, than refactorable 
( :D ) code. Using self._numbers raises less questions to the reader. 
Though I admit that question raised by get_all are answered in 5 seconds 
(the question being 'If he used an method instead of _numbers, this 
method must do something special')

- In fine, it doesn't really matter in the example you gave above.

JM






More information about the Python-list mailing list