[Python-3000] Generic function PEP won't make it in time
Jim Jewett
jimjjewett at gmail.com
Tue Apr 24 19:35:08 CEST 2007
On 4/24/07, Talin <talin at acm.org> wrote:
> In what is considered "good style" for such languages, protected helper
> methods ought to have different names than the methods which invoke
> them. So for example, you might have the following:
> /// Abstract base class for hashable object
> class Hashable {
> public:
> /// Declare abstract hash method
> virtual int GetHash() const = 0;
>
> protected:
> /// Protected helper method
> int DefaultHashFunc() { return 0; }
> };
This is exactly why diamond inheritance is tricky. Try this with a
cooperative method, such as save_state.
def save_state(self):
# Save my own state, then...
# Do call the helper method if no one else will...
# Do not call the helper method in case someone else does...
The solution is to avoid making the "top" of the hierarchy a
singleton. Calling it (through super) is OK. It might even be
helpful, or it might be a no-op -- but it is safe to call through
inheritance.
The reason to mark it @abstract is to say that the implementation
isn't complete yet. For hashable, you may never call super at all;
for save_state, you should always call it.
-jJ
More information about the Python-3000
mailing list