为何在函数内部定义的类调用函数后无法被访问?
为什么调用definer()后类A未被定义?
这是Python的作用域规则导致的结果:
- 你在
definer()函数内部定义的类A属于函数的局部作用域,这个作用域仅在函数执行期间有效。函数执行完毕后,局部作用域内的所有名称(包括A)都会被销毁,外部的全局作用域无法访问到这个类。 - 至于
Inside class会被打印出来,是因为Python定义类时,类体中的代码会被立即执行。调用definer()时,函数内部执行到class A:的定义,就会触发类体里的print语句,但类本身始终只存在于函数的局部空间中。
解决办法
有几种方式可以让外部访问到这个类:
- 把类定义移到全局作用域:
class A: print("Inside class") def definer(): pass definer() a = A()
- 让函数返回这个类,在全局作用域接收:
def definer(): class A: print("Inside class") return A A = definer() a = A()
- 使用
global声明将类绑定到全局作用域:
def definer(): global A class A: print("Inside class") definer() a = A()
内容的提问来源于stack exchange,提问作者vir
相关产品推荐
相关产品推荐

