On 18/01/12 02:13, Stayvoid wrote:

class A:
        def __init__(self, data):
                self.data = data
                print self.data

I'm trying to understand this function-like syntax:
A('foo').__init__(42)

You would not normally call any method with a double underscore pre/poist fix because they are special methods called by Python
itself. Thus when you do

A('foo')

Python actually calls two special methods on class A. First it calls the __new__() method to create an instance of A then it calls __init__() with 'foo' as argument to initialise that instance. You don't need to call init() directly. In fact it may even cause problems if you initialise a class twice.

So when you do

A('foo').__init__(42)

You actually do 3 things:
First you create a new instance of A, then you initialise it with 'foo' then you initialise it again with 42. In this case no harm is done because the init)() method just does a double assignment, losing the initial value. But if you were storing the data values in a lkist you would wind up with two values instead of one, which may not be a good thing.

A(12).data

Here you create another instance of A and initialise it with 12 then you access its data attribute. If you do this in the interpreter the value of data will be printed, if you do it in a program nothing will happen.

In both iof the cases above the newly created instances will be garbage collected since they were not assigned to any variable.

What are we actually calling this way?

You call the constructor __new__(), the initialiser __init__()
and you access a data item which calls the accessor __getattr__()

Are there any other ways to get the same result?

It depends how you define 'the same results'.
The same end state can be achieved in several ways.
The same methods can be called in several ways, for example
you can call init via the class:

anAinstance = A('foo')
A.__init__(anAinstance, 42)

But in general all of these are a bad idea outside of
a class/method definition. Don't do it.

--
Alan G
Author of the Learn to Program web site
http://www.alan-g.me.uk/

_______________________________________________
Tutor maillist  -  Tutor@python.org
To unsubscribe or change subscription options:
http://mail.python.org/mailman/listinfo/tutor

Reply via email to