繁体   English   中英

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

[英]Scope of classes inside of functions and classes inside of a class in python

我正在编写一些代码,并对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 = AB()对吗?

要实现的是, 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。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM