You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何在函数内部定义的类调用函数后无法被访问?

为什么调用definer()后类A未被定义?

这是Python的作用域规则导致的结果:

  • 你在definer()函数内部定义的类A属于函数的局部作用域,这个作用域仅在函数执行期间有效。函数执行完毕后,局部作用域内的所有名称(包括A)都会被销毁,外部的全局作用域无法访问到这个类。
  • 至于Inside class会被打印出来,是因为Python定义类时,类体中的代码会被立即执行。调用definer()时,函数内部执行到class A:的定义,就会触发类体里的print语句,但类本身始终只存在于函数的局部空间中。

解决办法

有几种方式可以让外部访问到这个类:

  1. 把类定义移到全局作用域:
class A:
    print("Inside class")

def definer():
    pass

definer()
a = A()
  1. 让函数返回这个类,在全局作用域接收:
def definer():
    class A:
        print("Inside class")
    return A

A = definer()
a = A()
  1. 使用global声明将类绑定到全局作用域:
def definer():
    global A
    class A:
        print("Inside class")

definer()
a = A()

内容的提问来源于stack exchange,提问作者vir

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.30 00:52:10