avances123
avances123

Reputation: 2344

How to call internal functions inside the constructor class?

Hello i have this code

class Test(object):
    def start_conn(self):
        pass

    def __init__(self):
        self.conn = start_conn()

But this code make this error:

NameError: global name 'start_conn' is not defined

If i write self.conn = self.start_conn() the program works without error, my question is, is a must to call with self the methods of the class when i'm creating a new instance? or is a desgin error from my side?

Thanks a lot

Upvotes: 3

Views: 6251

Answers (1)

senderle
senderle

Reputation: 150977

In short, it's a must. You have to refer to the container in which the methods are stored. Most of the time that means referring to self.

The way this works is as follows. When you define a (new-style) class

class FooClass(object):
    def my_method(self, arg):
        print self.my_method, arg

you create a type object that contains the method in its unbound state. You can then refer to that unbound method via the name of the class (i.e. via FooClass.my_method); but to use the method, you have to explicitly pass a FooClass object via the self parameter (as in FooClass.my_method(fooclass_instance, arg)).

Then, when you instantiate your class (f = FooClass()), the methods of FooClass are bound to the particular instance f. self in each of the methods then refers to that instance (f); this is automatic, so you no longer have to pass f into the method explicitly. But you could still do FooClass.my_method(f, arg); that would be equivalent to f.my_method(arg).

Note, however, that in both cases, self is the container through which the other methods of the class are passed to my_method, which doesn't have access to them through any other avenue.

Upvotes: 4

Related Questions