0

我正在写一些代码并且有一个关于 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()吗?

4

1 回答 1

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。

于 2013-07-16T20:19:54.737 回答