Nice solution wanted: Hide internal interfaces

Grant Edwards invalid at invalid.invalid
Mon Oct 29 12:52:24 EDT 2012


On 2012-10-29, Johannes Bauer <dfnsonfsduifb at gmx.de> wrote:

> I'm currently looking for a good solution to the following problem: I
> have two classes A and B, which interact with each other and which
> interact with the user. Instances of B are always created by A.
>
> Now I want A to call some private methods of B and vice versa (i.e.
> what C++ "friends" are), but I want to make it hard for the user to
> call these private methods.

The Python way of telling a user not to call certain methods is to
prefix their names with an underscore.  The double-underscore thing
that munges the names is just telling that a bit louder -- but they're
still free to ignore that advice.

> Currently my ugly approach is this: I delare the internal methods
> private (hide from user). Then I have a function which gives me a
> dictionary of callbacks to the private functions of the other
> objects. This is in my opinion pretty ugly (but it works and does
> what I want).

By "decleare them privide" do you mean using __ASDF__ name-munging?

It sounds to me like you're just making life hard on yourself.

> I'm pretty damn sure there's a nicer (prettier) solution out there,
> but I can't currently think of it. Do you have any hints?

IMO, the "right" thing to do in Python is to use single underscore
names for methods that you intend to be called by "friend" modules (is
that correct C++ lingo?) but don't intend to be called by the
end-user.

-- 
Grant Edwards               grant.b.edwards        Yow! I just had a NOSE
                                  at               JOB!!
                              gmail.com            



More information about the Python-list mailing list