Private methods

D

D.M. Procida

What exactly is the point of a private method? Why or when would I want
to use one?

Daniele
 
D

D.M. Procida

Mark Lawrence said:
Hardly a Python question but using a search engine could have got you
here, and rather faster :)
http://stackoverflow.com/questions/2620699/why-private-methods-in-the-ob
ject-oriented

Thanks. Sometimes I prefer to talk to real people on Usenet than do web
searches. Just my preference.

Anyway, one of the answers on that page explains that public methods are
interfaces to a class, that other things might rely on, and private ones
are for its own internal logic, that other things don't need to care
about.

In Python, using an underscore is simply a convention to note that a
method is private - it doesn't actually hide it from other things -
correct?

Daniele
 
D

Demian Brecht

In Python, using an underscore is simply a convention to note that a
method is private - it doesn't actually hide it from other things -
correct?

Daniele

A single underscore semantically means private. A double underscore will
name mangle the function such that it's only accessible strictly by name
through the class that it's define in. Note that you *can* still access
it if you understand how name mangling works. Nothing in Python is truly
private.
 
R

Robert Kern

http://stackoverflow.com/questions/2620699/why-private-methods-in-the-ob
ject-oriented

Thanks. Sometimes I prefer to talk to real people on Usenet than do web
searches. Just my preference.

That's understandable, but the real people on Usenet who will answer your
questions usually prefer that you do a web search first, for a variety of reasons.

http://www.catb.org/esr/faqs/smart-questions.html#before
Anyway, one of the answers on that page explains that public methods are
interfaces to a class, that other things might rely on, and private ones
are for its own internal logic, that other things don't need to care
about.

In Python, using an underscore is simply a convention to note that a
method is private - it doesn't actually hide it from other things -
correct?

This is correct.

--
Robert Kern

"I have come to believe that the whole world is an enigma, a harmless enigma
that is made terrible by our own mad attempt to interpret it as though it had
an underlying truth."
-- Umberto Eco
 
T

Tim Chase

In Python, using an underscore is simply a convention to note that a
method is private - it doesn't actually hide it from other things -
correct?

Correct. You can read the leading underscore as "if you use this,
don't come crying if it breaks on you in a future version because we
changed an internal implementation. We told you so."

-tkc
 
I

Ian Kelly

A single underscore semantically means private. A double underscore will
name mangle the function such that it's only accessible strictly by name
through the class that it's define in. Note that you *can* still access it
if you understand how name mangling works. Nothing in Python is truly
private.

I tend to view name mangling as being more for avoiding internal
attribute collisions in complex inheritance structures than for
designating names as private.
 
S

Steven D'Aprano

I tend to view name mangling as being more for avoiding internal
attribute collisions in complex inheritance structures than for
designating names as private.

Really? I tend to view name mangling as a waste of time, and complex
inheritance structures as something to avoid.
 
D

Demian Brecht

Really? I tend to view name mangling as a waste of time, and complex
inheritance structures as something to avoid.

Yep, I've been coming around to this as of late.
 
D

D.M. Procida

Demian Brecht said:
Yep, I've been coming around to this as of late.

I have a lot of inheritance. I don't know whether you'd call it complex,
but I use a lot of mixins to build classes.

It certainly makes it quick to build a class with the attributes I need,
but it does make tracing logic sometimes a pain in the neck.

I don't know what the alternative is though.

Daniele
 
R

Robert Kern

Really? I tend to view name mangling as a waste of time, and complex
inheritance structures as something to avoid.

Whatever you may think of the use case, it was the motivating reason why it was
put into the language:

http://docs.python.org/reference/lexical_analysis.html#reserved-classes-of-identifiers

--
Robert Kern

"I have come to believe that the whole world is an enigma, a harmless enigma
that is made terrible by our own mad attempt to interpret it as though it had
an underlying truth."
-- Umberto Eco
 
R

Roy Smith

http://stackoverflow.com/questions/2620699/why-private-methods-in-the-ob
ject-oriented

Thanks. Sometimes I prefer to talk to real people on Usenet than do web
searches. Just my preference.

Anyway, one of the answers on that page explains that public methods are
interfaces to a class, that other things might rely on, and private ones
are for its own internal logic, that other things don't need to care
about.

In Python, using an underscore is simply a convention to note that a
method is private - it doesn't actually hide it from other things -
correct?

Yes (modulo some details of how import works that I've never fully
figured out and which lack of knowledge hasn't seemed to have hurt me
any).

I view public and private in Python this way:

Public: I hereby declare that this method or attribute is part of the
promised never to change interface of this class. I might possibly
break that promise at some point in the future, but if I do, you have
the right to bitch and whine about it, and I'm morally obligated to at
least pretend I care.

Private: I hereby declare that this method or attribute is something I
needed to have for my own purposes, and is officially hidden inside my
kimono. Like all things inside my kimono, you may speculate about their
existence all you want, but you touch them at your own peril. I may
change them at some point in the future, and while you can bitch and
whine about it all you want, I'm not listening.
 
R

Ramchandra Apte

(e-mail address removed) (D.M. Procida) wrote:











Yes (modulo some details of how import works that I've never fully

figured out and which lack of knowledge hasn't seemed to have hurt me

any).



I view public and private in Python this way:



Public: I hereby declare that this method or attribute is part of the

promised never to change interface of this class. I might possibly

break that promise at some point in the future, but if I do, you have

the right to bitch and whine about it, and I'm morally obligated to at

least pretend I care.



Private: I hereby declare that this method or attribute is something I

needed to have for my own purposes, and is officially hidden inside my

kimono. Like all things inside my kimono, you may speculate about their

existence all you want, but you touch them at your own peril. I may

change them at some point in the future, and while you can bitch and

whine about it all you want, I'm not listening.

Uhum. Language please.
 
M

Mark Lawrence

Uhum. Language please.

What language? Further the original was readable, your use of CrapMail
made life difficult until I stripped the superfluous newlines out. Is
it really so awkward to equip yourself with a semi-decent mail reader?
Like Thunderbird, hint, hint :)
 
G

Grant Edwards

What language?

Perhaps he didn't like the kimono metaphor?

I always though the kimono metaphore as commonly used by MBA/sales
types was a little unseemly (but then most of what those types say is,
regardless of language or metaphor).
Further the original was readable, your use of CrapMail made life
difficult until I stripped the superfluous newlines out. Is it
really so awkward to equip yourself with a semi-decent mail reader?
Like Thunderbird, hint, hint :)

You're tilting at windmills.

Just give up and filter out all postings with a messageid ending in
'@googlegroups.com'. I find that solves all sorts of problems...
 
A

alex23

It certainly makes it quick to build a class with the attributes I need,
but it does make tracing logic sometimes a pain in the neck.

I don't know what the alternative is though.

Components.

The examples are in C++ and it's about game development, but I found
this article to be very good at explaining the approach:
http://gameprogrammingpatterns.com/component.html

I've become a big fan of components & adaptation using zope.interface:
http://wiki.zope.org/zope3/ZopeGuideComponents
 
8

88888 Dihedral

D.M. Procidaæ–¼ 2012å¹´10月9日星期二UTC+8下åˆ9時24分30秒寫é“:
What exactly is the point of a private method? Why or when would I want

Private methods in the object level are searched first
in the run time of python interpreter.

I did turn some private methods in to c programs from time to time.
 
D

Dieter Maurer

alex23 said:
Components.

The examples are in C++ and it's about game development, but I found
this article to be very good at explaining the approach:
http://gameprogrammingpatterns.com/component.html

I've become a big fan of components & adaptation using zope.interface:
http://wiki.zope.org/zope3/ZopeGuideComponents

If multiple inheritance is deemed complex, adaptation is even more so:

With multiple inheritance, you can quite easily see from the source
code how things are put together.
Adaptation follows the "inversion of control" principle. With this
principle, how a function is implemented, is decided outside
and can very easily be changed (e.g. through configuration).
This gives great flexibility but also nightmares when things do
not work as expected...
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
473,769
Messages
2,569,579
Members
45,053
Latest member
BrodieSola

Latest Threads

Top