Variable scope in classes

David MacQuigg dmq at gain.com
Fri Mar 26 01:19:07 CET 2004


On Thu, 25 Mar 2004 16:03:49 -0600, "Larry Bates"
<lbates at swamisoft.com> wrote:

>I'm confused about variable scope in a class
>that is derived from a base class framework.
>
>Can someone enlighten me on why bar.__init__
>method can't see self.__something variable
>in the foo.__init__?
>
>Example:
>
>
>class foo:
>    def __init__(self):
>        print self.__something
>
>
>class bar(foo):
>    __something="This is a test"
>
>    def __init__(self):
>        foo.__init__(self)
>
>
>x=bar()
>
>returns the following traceback:

So why did you put __ in front of 'something' if you were not
intending this to be a "private" variable?

>Traceback (most recent call last):
>  File
>"C:\Python22\Lib\site-packages\Pythonwin\pywin\framework\scriptutils.py",
>line 301, in RunScript
>    exec codeObject in __main__.__dict__
>  File "F:\SYSCON\SMARTROUTE\classjunk.py", line 13, in ?
>    x=bar()
>  File "F:\SYSCON\SMARTROUTE\classjunk.py", line 10, in __init__
>    foo.__init__()
>  File "F:\SYSCON\SMARTROUTE\classjunk.py", line 3, in __init__
>    print self.__something
>AttributeError: bar instance has no attribute '_foo__something'

Python makes the the variable "private" by prepending _foo to whatever
you name with two leading underscores.

-- Dave

>Is there some "other" way to do this without passing information
>through foo.__init__ argument list?
>
>Regards,
>Larry Bates
>Syscon
>




More information about the Python-list mailing list