473,378 Members | 1,207 Online
Bytes | Software Development & Data Engineering Community
Post Job

Home Posts Topics Members FAQ

Join Bytes to post your question to a community of 473,378 software developers and data experts.

What's the difference between VAR and _VAR_?

Hi,
I'm new in python and I was wondering what's the difference between
the two code section below:

(I)
class TestResult:
_pass_ = "pass"
_fail_ = "fail"
_exception_ = "exception"

(II)
class TestResult:
pass = "pass"
fail = "fail"
exception = "exception"

Thanks for your help.

Sep 9 '05 #1
10 2796
Johnny Lee wrote:
I'm new in python and I was wondering what's the difference between
the two code section below:

(I)
class TestResult:
_pass_ = "pass"
_fail_ = "fail"
_exception_ = "exception"

(II)
class TestResult:
pass = "pass"
fail = "fail"
exception = "exception"

Thanks for your help.


There's nothing per se different between a variable named 'x' and one
named '_x_'. The difference here is that pass is a keyword, so

pass = 'pass'

is illegal.

--
Erik Max Francis && ma*@alcyone.com && http://www.alcyone.com/max/
San Jose, CA, USA && 37 20 N 121 53 W && AIM erikmaxfrancis
Experience is the name everyone gives to their mistakes.
-- Oscar Wilde
Sep 9 '05 #2
As what you said, the following two code section is totally the same?

(I)
class TestResult:
_passxxx_ = "pass"

(II)
class TestResult:
passxxx = "pass"

Sep 9 '05 #3
Johnny Lee wrote:
As what you said, the following two code section is totally the same?

(I)
class TestResult:
_passxxx_ = "pass"

(II)
class TestResult:
passxxx = "pass"


No, of course not. One defines a class varaible named `_passxxx_', the
other defines one named `passsxxx'.

--
Erik Max Francis && ma*@alcyone.com && http://www.alcyone.com/max/
San Jose, CA, USA && 37 20 N 121 53 W && AIM erikmaxfrancis
Experience is the name everyone gives to their mistakes.
-- Oscar Wilde
Sep 9 '05 #4

Erik Max Francis wrote:

No, of course not. One defines a class varaible named `_passxxx_', the
other defines one named `passsxxx'.

I mean.... besides the difference of name...

Sep 9 '05 #5
Johnny Lee wrote:
I mean.... besides the difference of name...


You're going to have to be more clear; I don't understand your question.
What's the difference between

a = 1

and

b = 1

besides the difference of name?

--
Erik Max Francis && ma*@alcyone.com && http://www.alcyone.com/max/
San Jose, CA, USA && 37 20 N 121 53 W && AIM erikmaxfrancis
Who, my friend, can scale Heaven?
-- _The Epic of Gilgamesh_
Sep 9 '05 #6

Erik Max Francis wrote:

You're going to have to be more clear; I don't understand your question.
What's the difference between

a = 1

and

b = 1

besides the difference of name?


I thought there must be something special when you named a VAR with '_'
the first character. Maybe it's just a programming style and I had
thought too much...

Sep 9 '05 #7
EP
I thought there must be something special when you named a VAR with '_'
the first character. Maybe it's just a programming style and I had
thought too much...


Perhaps you are thinking of the use of double leading underscore names within class declarations or system defined names with underscores?

e.g. __somePrivateVar

e.g. __init__
"""
9.6 Private Variables
There is limited support for class-private identifiers. Any identifier of the form __spam (at least two leading underscores, at most one trailing underscore) is textually replaced with _classname__spam, where classname is thecurrent class name with leading underscore(s) stripped. This mangling is done without regard to the syntactic position of the identifier, so it can be used to define class-private instance and class variables, methods, variables stored in globals, and even variables stored in instances. private to this class on instances of other classes. Truncation may occur when the mangled name would be longer than 255 characters. Outside classes, or when theclass name consists of only underscores, no mangling occurs.

Name mangling is intended to give classes an easy way to define ``private''instance variables and methods, without having to worry about instance variables defined by derived classes, or mucking with instance variables by code outside the class. Note that the mangling rules are designed mostly to avoid accidents; it still is possible for a determined soul to access or modify a variable that is considered private. This can even be useful in special circumstances, such as in the debugger, and that's one reason why this loophole is not closed. (Buglet: derivation of a class with the same name asthe base class makes use of private variables of the base class possible.)

Notice that code passed to exec, eval() or evalfile() does not consider theclassname of the invoking class to be the current class; this is similar to the effect of the global statement, the effect of which is likewise restricted to code that is byte-compiled together. The same restriction applies to getattr(), setattr() and delattr(), as well as when referencing __dict__directly. """

"""
2.3.2 Reserved classes of identifiers
Certain classes of identifiers (besides keywords) have special meanings. These classes are identified by the patterns of leading and trailing underscore characters:
_*
Not imported by "from module import *". The special identifier "_" is used in the interactive interpreter to store the result of the last evaluation; it is stored in the __builtin__ module. When not in interactive mode, "_" has no special meaning and is not defined. See section 6.12, ``The import statement.''
Note: The name "_" is often used in conjunction with internationalization; refer to the documentation for the gettext module for more information on this convention.
__*__
System-defined names. These names are defined by the interpreter and it's implementation (including the standard library); applications should not expect to define additional names using this convention. The set of names of this class defined by Python may be extended in future versions. See section3.3, ``Special method names.''

__*
Class-private names. Names in this category, when used within the context of a class definition, are re-written to use a mangled form to help avoid name clashes between ``private'' attributes of base and derived classes. See section 5.2.1, ``Identifiers (Names).''


--------------------------------------------------------------------------------

"""

Sep 9 '05 #8
I can't get the value of the variable (out of the class function) if it has
two leading underscores.

-Dave
class encrypt: def encrypt(self, userValue):
self.initialNumber = userValue
self.__secretSeed = 7
return self.initialNumber * self.__secretSeed
enc = encrypt()
enc.encrypt(5) 35 print enc.initialNumber 5 print enc.__secretSeed


Traceback (most recent call last):
File "<pyshell#15>", line 1, in -toplevel-
print enc.__secretSeed
AttributeError: encrypt instance has no attribute '__secretSeed'

Sep 9 '05 #9
S. D. Rose wrote:
I can't get the value of the variable (out of the class function) if it has
two leading underscores.


Sure you can if you want it hard enough; it's just mangled.
class C: __x = 1 .... dir(C) ['_C__x', '__doc__', '__module__'] c = C()
dir(c) ['_C__x', '__doc__', '__module__'] c._C__x

1

--
Erik Max Francis && ma*@alcyone.com && http://www.alcyone.com/max/
San Jose, CA, USA && 37 20 N 121 53 W && AIM erikmaxfrancis
What is now prov'd was once only imagin'd.
-- William Blake
Sep 9 '05 #10
On 8 Sep 2005 22:48:05 -0700
"Johnny Lee" <jo************@hotmail.com> wrote:
I thought there must be something special when you named a VAR with
'_' the first character. Maybe it's just a programming style and I had
thought too much...


It is just a programming style issue. In Python, variables and functions
beginning with '_' are regarded by convention to be semi-private;
essentially the Python equivalent of 'protected'. Since Python has no
formal access specifications, conventions like this have been adopted.
Likewise, '__' is private. Code using your code can bypass this, of
course, but it's just a signal to the programmer 'avoid using this; it
is an internal detail that may change.'

Incidentally, epydoc regards all items beginning with '_' as private,
and hides them from the public documentation it generates.

And, in one project I'm working on, I use underscores to
base/background/helper modules in a mechanism where modules are
dynamically loaded (to prevent name collisions, since no dynamically
loaded module will begin with an underscore).

- Michael
Sep 10 '05 #11

This thread has been closed and replies have been disabled. Please start a new discussion.

Similar topics

125
by: Sarah Tanembaum | last post by:
Beside its an opensource and supported by community, what's the fundamental differences between PostgreSQL and those high-price commercial database (and some are bloated such as Oracle) from...
5
by: radnus2004 | last post by:
Hi all, I am not clear what is the difference between signed and unsigned in C. Many say, unsigned means only +ve values and 0. Can I use unsigned int i = -3? What happens internally ? What...
10
by: tinesan | last post by:
Hello fellow C programmers, I'm just learning to program with C, and I'm wondering what the difference between signed and unsigned char is. To me there seems to be no difference, and the...
13
by: Jason Huang | last post by:
Hi, Would someone explain the following coding more detail for me? What's the ( ) for? CurrentText = (TextBox)e.Item.Cells.Controls; Thanks. Jason
12
by: Nathan Sokalski | last post by:
What is the difference between the Page_Init and Page_Load events? When I was debugging my code, they both seemed to get triggered on every postback. I am assuming that there is some difference,...
3
by: Anoj Kumar | last post by:
Hi All , can anyone tell me what is the difference between the following declaration and how it affects application performance. 1. Dim cn As ADODB.Connection Set cn = New ADODB.Connection
6
by: Mark Kamoski | last post by:
Hi Everyone-- Please help. What is the difference between a Field and a Property? Here is the context. In the VS.NET 2002 documentation, in the "String Members" section, we have the...
5
by: kai | last post by:
Hi, In ASP.NET , what is the difference between OnClick and Click events for a button? Because we have button click event, it can trigger events, why we still need OnClick? Please help. ...
49
by: Zach | last post by:
After having taken a looong break from VB (last used 6.0), I started getting back into programming again, this time with VS 2005. I began reading up on VB.NET from various sources (books,...
1
by: CloudSolutions | last post by:
Introduction: For many beginners and individual users, requiring a credit card and email registration may pose a barrier when starting to use cloud servers. However, some cloud server providers now...
0
by: Faith0G | last post by:
I am starting a new it consulting business and it's been a while since I setup a new website. Is wordpress still the best web based software for hosting a 5 page website? The webpages will be...
0
isladogs
by: isladogs | last post by:
The next Access Europe User Group meeting will be on Wednesday 3 Apr 2024 starting at 18:00 UK time (6PM UTC+1) and finishing by 19:30 (7.30PM). In this session, we are pleased to welcome former...
0
by: ryjfgjl | last post by:
In our work, we often need to import Excel data into databases (such as MySQL, SQL Server, Oracle) for data analysis and processing. Usually, we use database tools like Navicat or the Excel import...
0
by: Charles Arthur | last post by:
How do i turn on java script on a villaon, callus and itel keypad mobile phone
0
by: ryjfgjl | last post by:
If we have dozens or hundreds of excel to import into the database, if we use the excel import function provided by database editors such as navicat, it will be extremely tedious and time-consuming...
0
by: emmanuelkatto | last post by:
Hi All, I am Emmanuel katto from Uganda. I want to ask what challenges you've faced while migrating a website to cloud. Please let me know. Thanks! Emmanuel
1
by: nemocccc | last post by:
hello, everyone, I want to develop a software for my android phone for daily needs, any suggestions?
1
by: Sonnysonu | last post by:
This is the data of csv file 1 2 3 1 2 3 1 2 3 1 2 3 2 3 2 3 3 the lengths should be different i have to store the data by column-wise with in the specific length. suppose the i have to...

By using Bytes.com and it's services, you agree to our Privacy Policy and Terms of Use.

To disable or enable advertisements and analytics tracking please visit the manage ads & tracking page.