python类中的变量范围

发布于 2021-02-02 23:20:06

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

在类内的函数内声明变量:只有该函数才能访问它(在该函数范围内)

在类内的函数内部声明带有self。(变量名)的变量:所有类函数都可以访问它(这与全局变量名有何不同?)

并且由于没有私有/受保护的事物,所以所有事物都是公共的,因此可以从类外部访问所有可以从类内部访问的事物。

我还有其他细微差别应该知道吗?

关注者
0
被浏览
70
1 个回答
  • 面试哥
    面试哥 2021-02-02
    为面试而生,有面试问题,就找面试哥。

    由于你问题中的清单不是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__函数中使用,因为它没有保存在实例,类或全局范围中。


知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看