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

Godot 4中如何通过本地类实例访问该类本身?

在GDScript中访问本地类B的引用方案

针对你遇到的本地类实例无法获取类本身引用的问题,有两种实用的解决办法:

方法一:给本地类添加静态方法返回自身引用

这是最直接的方案,在父类A和子类B中都定义一个静态方法,用来返回类本身的引用,这样实例就能通过调用该方法拿到类对象,进而使用is_instance_of等方法:

class A:
    # 父类添加静态方法返回自身
    static func get_class_ref():
        return A

class B extends A:
    # 子类重写静态方法返回自身
    static func get_class_ref():
        return B

func is_subclass(sub: A, sup: A) -> bool:
    # 调用静态方法获取类引用,传入is_instance_of
    return is_instance_of(sub, sup.get_class_ref())

var a := A.new()
var b := B.new()
print(is_subclass(b, a)) # 输出true
print(is_subclass(a, b)) # 输出false

方法二:在实例初始化时绑定类引用到元数据

如果不想修改类结构,可以在本地类的_init方法里,把类引用存入实例的元数据中,之后通过get_meta取出:

class A:
    pass

class B extends A:
    func _init():
        # 将B类引用存入实例元数据
        set_meta("class_ref", B)

func is_subclass(sub: A, sup: A) -> bool:
    # 从元数据获取类引用
    var sup_class = sup.get_meta("class_ref")
    return is_instance_of(sub, sup_class)

var a := A.new()
# 注意父类A也需要绑定元数据,否则调用get_meta会报错
a.set_meta("class_ref", A)
var b := B.new()
print(is_subclass(b, a)) # 输出true
print(is_subclass(a, b)) # 输出false

为什么get_class()和get_script()无效?

  • get_class()返回的是类的名称字符串,而is_instance_of需要的是类对象引用,字符串无法直接传入使用;
  • get_script()返回的是包含本地类的父脚本对象,不是本地类B本身,所以也无法用于类型判断。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.12 23:37:36