Re: Trying to understand a little python

2004-12-07 Thread John Thingstad
On Tue, 07 Dec 2004 19:07:42 +1000, Nick Coghlan <[EMAIL PROTECTED]>  
wrote:

McCarty, Greg wrote:
Ok, I'm new to python, and I'm trying to come to grips with a few  
things.
Got
lots of years of experience with Java and asp/aspx, etc.  Trying to  
relate
Python's behavior to what I already know.
You may find the following a useful overview of how class & instance  
attributes work:
http://mail.python.org/pipermail/python-list/2004-November/251782.html

(Keep in mind that I'm only considering 'normal' attributes in that  
message - it covers the behaviour in most cases, but not quite all. When  
things stop behaving as you expect based on this description, the  
relevant word is almost certainly "descriptors")

Cheers,
Nick.
www.norvig.com has some insightfull comparisons of Java, Lisp and Python
--
Using M2, Opera's revolutionary e-mail client: http://www.opera.com/m2/
--
http://mail.python.org/mailman/listinfo/python-list


Re: Trying to understand a little python

2004-12-07 Thread Nick Coghlan
McCarty, Greg wrote:
Ok, I'm new to python, and I'm trying to come to grips with a few things.
Got
lots of years of experience with Java and asp/aspx, etc.  Trying to relate
Python's behavior to what I already know.
You may find the following a useful overview of how class & instance attributes 
work:
http://mail.python.org/pipermail/python-list/2004-November/251782.html

(Keep in mind that I'm only considering 'normal' attributes in that message - it 
covers the behaviour in most cases, but not quite all. When things stop behaving 
as you expect based on this description, the relevant word is almost certainly 
"descriptors")

Cheers,
Nick.
--
Nick Coghlan   |   [EMAIL PROTECTED]   |   Brisbane, Australia
---
http://boredomandlaziness.skystorm.net
--
http://mail.python.org/mailman/listinfo/python-list


Re: Trying to understand a little python

2004-12-06 Thread Jeremy Jones




McCarty, Greg wrote:

  
  
  
  
  Ok, I'm new to python,
and I'm trying to come to grips with
a few things.  Got
  lots of years of
experience with Java and asp/aspx,
etc.  Trying to relate
  Python's behavior to what
I already know.
   
  Here's the python code
(line #'s added for my question) -
   
  01 class Tester:
  02 def __init__
(self):
  03 print
"I'm initializing Tester"
  04
  05 def test(klass=Tester):
  06 klass.stuff =
"setting
stuff"
  07 print "I'm in
test: " +
klass.stuff
  08
  09
test()  # results 1: I'm
in test: setting stuff
  10 a=Tester()  #
results 2: I'm
initializing Tester
  11 a.stuff #
results 3: 'setting stuff'
  12 b=Tester()  #
results 4: I'm
initializing Tester
  13 b.stuff #
results 5: 'setting stuff'
  14 a.stuff="changed!"
  15 b.stuff #
results 6: 'setting stuff'
  16 a.stuff #
results 7:'changed!'
   
  And here's my questions -
   
  Line 09 - I expected the
default argument assignment of line
05 to 
  create an object of type
Tester and assign it to the var
klass.  Thus I
  expected Tester.__init__
to fire, which it didn't. 
What does 'klass=Tester' 
  actually do on line 05?
   
  

klass=Tester sets the default value of the variable klass to the
*class* Tester.  This isn't creating an instance of Tester.  Only
pointing klass to the class itself.

  
  Line 10 - Seems that the
syntax 'Tester()' actually causes
the __init__ method to 
  fire.  Is this the only
case?
  

Mostly.  You can use getattr if you like.  And probably eval or exec. 
But I would try to stick with the Tester() syntax.

  
  
   
  Line 12 - At this point,
I was thinking of Tester.stuff as a
static variable
  of the Tester class.
  

When you set a.stuff to "changed", you are setting an instance
attribute on "a" to "changed".  "b" is still pointing to the "static
variable" on Tester.  Look at this:

In [12]: a = Tester()
I'm initializing Tester

In [13]: b = Tester()
I'm initializing Tester

In [14]: Tester.stuff
Out[14]: 'setting stuff'

In [15]: Tester.stuff = "FOOBAR"

In [16]: a.stuff
Out[16]: 'FOOBAR'

In [17]: b.stuff
Out[17]: 'FOOBAR'

In [18]: a.stuff = "A.STUFF"

In [19]: a.stuff
Out[19]: 'A.STUFF'

In [20]: b.stuff
Out[20]: 'FOOBAR'

I re-set Tester.stuff to "FOOBAR".  "a" and "b" attributes "stuff" were
pointing to that for a second.  Then I pointed the attribute "stuff" on
"a" to "FOOBAR".

  
  
   
  Line 15 - We'll, I guess
stuff isn't a static variable! 
What is the
  explanation here?
   
  Thanks for any help.
   
  Greg McCarty
  Senior Technical Advisor / ManTech
IST
  ph:  410-480-9000 x2804
or
703-674-2804    fx: 410-480-0916
   
  

HTH.

Jeremy


-- 
http://mail.python.org/mailman/listinfo/python-list