How to get subclasses to print their names instead of "Resource"?

Godot Version

4.3.stable

Question

I have a base class BaseComponent and its subclasses ComponentOne, ComponentTwo, and ComponentThree. When I use the command print(ComponentOne), it outputs “Resource”. How can I modify BaseComponent so that its subclasses print their class_name correctly, for example, print(ComponentTwo) should output “ComponentTwo”?

BaseComponent
extends Resource
class_name BaseComponent

func _to_string() -> String:
    return get_class()

ComponentOne
extends BaseComponent
class_name ComponentOne

@export var some_var: String

Main Script
extends Node

@export var Component: BaseComponent

func _ready() -> void:
    print(Component)

get_class does not recognize GDScript class_names, sadly an engine limitation. You could tell _to_string to return "BaseComponent" though I understand that’s not fun, nor does it extend to other classes automatically.

1 Like