Less APIs or more encapsulation?
bruno.42.desthuilliers at websiteburo.invalid
Thu Sep 10 09:07:34 CEST 2009
Tycho Andersen a écrit :
> On Wed, Sep 9, 2009 at 10:08 AM, 一首诗<newptcai at gmail.com> wrote:
>> But when C has many many methods to expose to outer user, 2nd choice
>> seems to be more reasonable I In the first design, B.newMethod did
>> nothing really useful.
> Is there any reason you can't do something like the following?
> class B(object):
> def __init__(self, c):
> self.__c = c;
There are very few real use case for the name-mangling '__name' scheme,
and this is probably not one. A single leading underscore should be enough.
> def __getattr__(self, name):
> return self.__c.__getattribute__(name)
__magic_methods__ are implementation support for operators and
operator-like generic functions (len() etc). The good practice is to use
the operator or generic function, not to directly call the
Also, since it's about encapsulation, it would be better to also hide
def __getattr__(self, name):
return getattr(self._c, name)
msg = "'%s' object as no attribute '%s'"
raise AttributeError(msg % (type(self), name)
More information about the Python-list