Velocity Reviews - Computer Hardware Reviews

Velocity Reviews > Newsgroups > Programming > Python > Magic?

Reply
Thread Tools

Magic?

 
 
mk
Guest
Posts: n/a
 
      07-13-2008

So I was playing around with properties and wrote this:

class lstr(str):
def __init__(self, initval):
self._s = initval
self._len = len(self._s)

def fget_s(self):
return str(self._s)

def fset_s(self, val):
self._s = val
self._len = len(self._s)

s = property(fget_s, fset_s)

def fget_len(self):
return self._len

def fset_len(self, val):
raise AttributeError, "Attribute is read-only."

len = property(fget_len, fset_len)


I obviously aimed at defining setters and getters for 's' and 'len'
attributes via using properties to that.

However, it appears that somehow this object prints the value of 's'
attribute without me setting any specific methods to do that:

>>> astr = lstr('abcdef')
>>> astr

'abcdef'
>>> astr.swapcase()

'ABCDEF'

How does it know to do that? I mean, I can understand how it knows to do
that since I used property:

>>> astr.s

'abcdef'

>>> vars(astr)

{'_len': 6, '_s': 'abcdef'}

How does the instance know to use _s value to return when the instance
is called?

Is this due to some trick handling of overriden __init__ method (i.e. it
knows to treat initval argument somehow specially)? Some other way? If
so, how?

 
Reply With Quote
 
 
 
Reply

Thread Tools

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are Off




Advertisments
 



1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57