python中类的函数和类内部的类的范围

时间:2013-07-16 20:17:37

标签: python class scope

我正在编写一些代码并且有关于python

的一般性问题

如果我有这样的话:

class A():
       def __init__(self):
           self.name
           ...
       def doSomething(self):
           class B():
               def __init__(self):
                   self.name
                   ...
           c = B()
           c.whatever()

这是否意味着B类仅对该函数是私有的,还是可以从A类的实例调用它?如果我有这样的代码,请注意:

 class A():
    class B():
         def __init__(self):
             self.name

    def __init__(self):
        self.name
        ...
        def doSomething(self):
        ...       

我可以通过这样做d = A.B()来调用它吗?

1 个答案:

答案 0 :(得分:1)

要意识到的是class语句只是创建一个值为类的变量。结果类的作用域的工作方式与变量的作用域的工作方式相同,如果您只是执行了x = 2这样的常规变量赋值。

除非另行指定,否则在函数内创建的任何变量都是该函数的本地变量。因此,在函数内部使用class语句只会创建一个值为类的局部变量。无法从函数外部访问它。

换句话说,这个:

def foo():
    class A(object):
        pass

与此没有什么不同:

def foo():
    A = 2

在这两种情况下,您都会在函数内部创建一个局部变量A.在一种情况下,它的值是一个类,而在另一种情况下,它的值是一个整数,但在这两种情况下它都是一个局部变量,并且在函数外部不存在。

在第二个示例中,类是在封闭类中创建的。在类名称空间内创建的变量是类属性,所以是的,您可以在描述时访问它。 (为什么你想这样做是另一个问题。)换句话说,如上所述:

class A(object):
    class B(object):
        pass

与此没有什么不同:

class A(object):
    B = 2

在这两种情况下,您都会创建一个具有类属性B的类A.