My fight with classes :)
TheSaint
fc14301589 at icqmail.com
Thu Jun 12 03:38:37 EDT 2008
On 04:51, giovedì 12 giugno 2008 Terry Reedy wrote:
First of all a big thank you, all.
> def makeappender():
> data = ['','']
> def appender(val):
> <code that mutates data>
> return appender
I'll give it a try. I just doubting if the data will be shared outside the
function.
Actually, my practice goes to send all variables to the functions and
expecting a returned value. Usually I'm not relying on that module's
variables are read inside a function. Probably I got wrong learning or
experiences.
> For multiple functions, use classes.
That's what I'm leaning to :)
Then I re-elaborated the class according your points and now it's what I
wanted to be. :)
(last time I forgot to past the first line)
Here it comes:
class StrJoin:
""" Join a pair of strings according to the leading first letter A or D,
it returns a list of 2 elements"""
def __init__(self):
self.valueA= ''
self.valueD= ''
def append(self, value):
if not isinstance(value, str):
raise TypeError, 'Wrong type concatenation'
if value.lower().startswith('a'):
self.valueA += value
if value.lower().startswith('d'):
self.valueD += value
return [self.valueA ,self.valueD]
def __getitem__(self,idx):
if idx > 1 : return self
if idx == 0 : return self.valueA
if idx == 1 : return self.valueD
__call__= append
def __repr__(self):
return '['+ self.valueA+ ','+ self.valueD+ ']'
And the shell >>:
>>> from utilities import StrJoin as zx
>>> k = zx()
>>> k
[,]
>>> k('add')
['add', '']
>>> k[2]
[add,]
>>> k[1]
''
>>> k[0]
'add'
>>> k('dad')
['add', 'dad']
>>> k('sad')
['add', 'dad']
>>> k('Alfa')
['addAlfa', 'dad']
>>> k('Dude')
['addAlfa', 'dadDude']
>>> k('Omega')
['addAlfa', 'dadDude']
>>> k('Dome')
['addAlfa', 'dadDudeDome']
>>> k.append[k]
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: 'instancemethod' object is unsubscriptable
>>> k(89)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "utilities.py", line 33, in append
raise TypeError, 'Wrong type concatenation'
TypeError: Wrong type concatenation
>>>
Mostly I'll use the call option. I also like to pass it into a function in
order to modularize the loop where it gets started.
--
Mailsweeper Home : http://it.geocities.com/call_me_not_now/index.html
More information about the Python-list
mailing list