python类中的变量范围

声明类中的变量(函数外部):所有类函数都可以访问它(基本上是一个公共变量)

在类中的函数内声明一个变量:只有该函数可以访问它(它在该函数范围内)

在类中的函数内声明一个带有self(变量名)的变量:所有类函数都可以访问它(这与全局(变量名)有什么不同?)

并且由于没有私有/受保护,所以一切都是公共的,因此可以从课堂外访问从课堂内部访问的所有内容.

我应该知道还有其他细微差别吗,还是我几乎得到了它?

最佳答案
由于您的问题中的列表并非100%明确,我决定用一个简单的例子来解释它.它还包括一些你在列表中没有提到的__something变量.

class Test:
    a = None
    b = None

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

在开始时,a和b只是为类本身定义的变量 – 可通过Test.a和Test.b访问,而不是特定于任何实例.

创建该类的实例时(导致执行__init__):

> print self.a找不到实例变量,因此返回类变量
> self.a = a:创建一个新的实例变量a.这会影响类变量,因此self.a现在将引用实例变量;要访问类变量,您现在必须使用Test.a
>对self._x的赋值会创建一个新的实例变量.它被认为“不是公共API的一部分”(又名保护),但从技术上讲,它没有不同的行为.
>对self .__ y的赋值创建了一个名为_Test__y的新实例变量,即它的名称被修改,因此除非你使用受损的名称,否则无法从类外部访问它.这可以用于“私人”变量.
> b的赋值创建了一个局部变量.除了__init__函数之外,它不能从任何地方获得,因为它没有保存在实例,类或全局范围中.

转载注明原文:python类中的变量范围 - 代码日志