Variable scopes in Python classes

前端 未结 4 2092
谎友^
谎友^ 2020-11-22 00:15

Declaring a variable in a class (outside of a function): all class functions can access it (basically a public variable)

Declaring a variable inside a function insid

4条回答
  •  终归单人心
    2020-11-22 00:29

    Since the listing in your question is not 100% clear, I've decided to explain it with a simple example. It also includes some things like __something variables you did not mention in your list.

    class Test:
        a = None
        b = None
    
        def __init__(self, a):
            print self.a
            self.a = a
            self._x = 123
            self.__y = 123
            b = 'meow'
    

    At the beginning, a and b are only variables defined for the class itself - accessible via Test.a and Test.b and not specific to any instance.

    When creating an instance of that class (which results in __init__ being executed):

    • print self.a doesn't find an instance variable and thus returns the class variable
    • self.a = a: a new instance variable a is created. This shadows the class variable so self.a will now reference the instance variable; to access the class variable you now have to use Test.a
    • The assignment to self._x creates a new instance variable. It's considered "not part of the public API" (aka protected) but technically it has no different behaviour.
    • The assignment to self.__y creates a new instance variable named _Test__y, i.e. its name is mangled so unless you use the mangled name it cannot be accessed from outside the class. This could be used for "private" variables.
    • The assignment to b creates a local variable. It is not available from anywhere but the __init__ function as it's not saved in the instance, class or global scope.

提交回复
热议问题