Ankur Agarwal
Ankur Agarwal

Reputation: 24788

Namespaces within a Python Class

I have this:

class MyClass:
    """A simple example class"""
    i = 12345
    def f(self):
        print i                     # self.i will work just fine
        return 'hello world'

When I do:

>>> x = MyClass()
>>> 
>>> x.f()

I get an error, as expected.

My question is:

  1. Why do I get the error?

  2. Why is there no namespace between the namespace of the function(or method) definition and the global namespace of the module containing the class?

  3. Is there any other way to reference i inside f in this case other than using self?

Upvotes: 2

Views: 2906

Answers (2)

sprasad
sprasad

Reputation: 9

Why do I get the error?

Answer: This is because the variable i & the symbol/level f which points to a function/method code are in MyClass namespace where as the value/callable code/body of the function f lies in global namespace.

Why is there no namespace between the namespace of the function(or method) definition and the global namespace of the module containing the class?

Answer: Not sure why the python designer decided to put function name/symbol in the class but its body in global namespace.

Is there any other way to reference i inside f in this case other than using self?

Answer: I don't think so, but even if it is then it might not be easier logic/code

Upvotes: 0

Alex G.P.
Alex G.P.

Reputation: 10028

  1. You've got an error because print i is trying to print a global (for the module) variable i. If you want to use the member of the class you should write self.i.
  2. Because Guido Van Rossum decided not to use namespaces. Actually, I don't know how to answer anymore.
  3. Yes, but no. Yes, because you can use "reflection" (I can't remember how it is called in python) and access any member of the class. No, because using self is the only usable way.

Upvotes: 3

Related Questions