Changing the private variables content
Ryniek90
ryniek90 at gmail.com
Wed Jul 22 08:29:20 EDT 2009
>
> ------------------------------------------------------------------------
>
> Temat:
> Re: Changing the private variables content
> Od:
> Gary Herron <gherron at islandtraining.com>
> Data:
> Tue, 21 Jul 2009 14:14:44 -0700
> Do:
> Ryniek90 <ryniek90 at gmail.com>
>
> Do:
> Ryniek90 <ryniek90 at gmail.com>
> Kopia:
> python-list at python.org
>
>
> Ryniek90 wrote:
>> Hi.
>> I'm writing some class, and decided to use inside private method and
>> some private variables. While with method i haven't got any problem's
>> with variables i have.
>> Maybe some example.
>> A class with private method and private variable:
>>
>> "
>> >>> class Secret(object):
>> #
>> def __init__(self):
>> self._number = 1
>> #
>> def _secret(self):
>> print self._number
>> def showit(self):
>> print "Secret number is:\n"
>> self._secret()
>>
>> >>> sec = Secret()
>> >>> sec.showit()
>> Secret number is:
>>
>> 1
>> >>> sec._number
>> 1
>> >>> sec._number = 2
>> >>> sec._number
>> 2
>> >>> sec._number += 3
>> >>> sec._number
>> 5
>> >>>
>> "
>>
>> As You can see, i made class with private method and private variable
>> inside __init__ constructor. I've changed also the variable value,
>> but outside class.
>> I've got problem with changing some variable value _inside__my_
>> class, which i'm writing.
>
> Not sure this is what you are asking, but a method (which is how I
> interpret "_inside__my_ class") changes the value by normal assignment
> like this:
>
> class Secret(object):
> ...
> def SetNumber(self,value):
> self._number = value
>
> Is that what you were asking?
>
>
> Gary Herron
>
>
>
>> I've searched over google, some tuts with topics about operations on
>> private variables, but didn't found anything - only how to make them,
>> but no how to assign new objects/override them with new content (and
>> other advanced and helpful options).
>>
>> If someone could help me, it would be great.
>>
>> Thanks.
>
>
Thanks for hint, but looks like i can't do what i want.
Maybe i show You my class:
"
class ModPrint(object):
u"""
This will be the doc.
"""
def __init__(self):
#Assign the Python installation directory - sys.exec_prefix - to
variable
self._default_search_path=sys.exec_prefix
self._chosen_module = ''
self._user_search_path = ''
self._this_module = ''
def _SetVar(self, attr, val):
self.attr = val
def _search_for_module(self, *args):
"""Private method which walks through default Python
installation directories, and search for prefered module."""
#walking thru all directories available in path '_user_search_path'
for root, dirs, files in os.walk(self._user_search_path):
for f in files:
#if found file 'f' is THAT module,
#full path to THAT file is assigned to variable
if f == ("%s.py" % self._chosen_module):
self._SetVar(self._this_module, os.path.join(root, f))
def print_module(self, _chosen_module='', _user_search_path='',
_default_search_path=sys.exec_prefix,):
"""Reads module chosen by user, and returns full content of this
module, as it is."""
#if custom search path hasn't been assigned,
#default path is being assigned as custom path
if self._user_search_path == '':
self._user_search_path = self._default_search_path
#using private method '_search_for_module' with 'self.' preffix
#to search for prefered module
self._search_for_module(_chosen_module, _user_search_path)
#opening prefered module with read-only binary mode
#and assigning it to 'module_open' variable
module_open = open(self._this_module, 'rb')
#reading this file and assigning it to variable
module_text = module_open.read()
#closing read file; the read content is still available
#it's stored in variable 'module_text'
module_open.close()
#returning the read content
return module_text
"
When i use this class in Python IDLE, i've got this error:
"
>>> mod = ModPrint()
>>> import socket
>>> mod.print_module('socket')
Traceback (most recent call last):
File "<pyshell#60>", line 1, in <module>
mod.print_module('socket')
File "<pyshell#57>", line 48, in print_module
module_open = open(self._this_module, 'rb')
IOError: [Errno 2] No such file or directory: ''
>>>
"
As You can see, i can't assign the new value "os.path.join(root, f)" to
the 'self._this_module variable'.
So for sure i've made some mistake in method:
"
def _SetVar(self, attr, val):
self.attr = val
"
When i've changed private variables to normal, stored in class (in
__init__ method), it was the same situation - i couldn't change this
variable value.
"
>>> mod = ModPrint()
>>> mod.print_module('os')
Traceback (most recent call last):
File "<pyshell#72>", line 1, in <module>
mod.print_module('os')
File "<pyshell#64>", line 48, in print_module
module_open = open(self.this_module, 'rb')
IOError: [Errno 2] No such file or directory: ''
>>>
"
Thanks i someone could help me, give some hint.
More information about the Python-list
mailing list