Yes, the function runs if I don't call deferred on it. Here is an example code
The class:
class_name TestClass
extends RefCounted
var prop: int :
set(v):
prop = v
_validate_prop.call_deferred()
func _init(p_prop: int) -> void:
prop = p_prop
func _validate_prop():
print(prop)
and the class in use:
extends Node2D
var test_class = TestClass.new(12)
func _ready() -> void:
var test_class2 = TestClass.new(18)
Running this will only print 12 and not 18. So the validate function is never run in _ready() if it is call_deferred. I guess it is because test_class2
is removed from memory when the ready function is done so it is not alive anymore at the end of the frame.