Python : 类定义中,不加self.和加self.的区别【关于局部变量和全局变量的使用详解】

先上代码,毕竟无代码言吊

>>> class k():
    c = 6
    def __init__(self):
        self.c=1

>>> k.c
6
>>> mk = k()
>>> mk.c
1

差别就在这个地方,第一个C实例是无法调用的,是类中的局部变量,只有父类可以调用,而且,单独输入C也是无法调用的,说明不是全局变量。

再看代码

>>> c = 4
>>> class k():
    def __init__(self):
        self.c=1
        c = 6
    def p(self):
        print(c)

>>> mk = k()
>>> mk.p()
4
>>> k.c
Traceback (most recent call last):
  File "", line 1, in
    k.c
AttributeError: type object 'k' has no attribute 'c'

此时,把常量定义放在初始化中,不能在外部调用,内部也无法使用,因为在__init__方法中定义便是__init__方法的局部变量。

所以,需要弄清楚常量定义的位置代表的管辖范围,方法中的局部变量无法在类中调用,内部优先调用全局变量,外部无法调用局部变量,除非变量前有申明,如最开头的代码。

在调用变量的时候一定要注意,如果目标是全局变量不需要注意,但是调用局部变量一定要添加申明,eg, k.c

你可能感兴趣的:(python)