|Topic was automatically imported from the old Question2Answer platform.
Hi, I started out with godot recently, coming from a python background. I like to think of godot scripts as the classes in my project, I’m not even using inner classes. A lot of my classes require instance variables, which in python I would just declare using “self” in the constructor. This is pretty much what I’m doing in godot at the moment, however I have to declare them before I can assign them with _init.
Here’s what I mean:
var attach_point: Vector2
var start_vec: Vector2
var end_vec: Vector2
var strength: float
func _init(attach_point, start_vec, end_vec, strength):
self.attach_point = attach_point
self.start_vec = start_vec
self.end_vec = end_vec
self.strength = strength
Is there a way to do this in one line? I am aware that I can just assign them after instancing the script, however I prefer to use my_class.new(param1, param2 …)
Note 1: if you attach a script to a node, I’m not sure
_init is allowed, because in those cases the scene loader needs to call a parameterless constructor (so at best your constructor won’t be called actually, unless you instance that script by code).
Note 2: you don’t have to
extend nodes each time, you can also not extend anything (which defaults to extending
Reference). It’s important to know this because there is a difference between
Object (which nodes derive from) and
Reference (which resources derive from). The first is explicitely freed unless inside the tree, the second is reference-counted.
Note 3: using
self to assign variables in Godot is very different from Python. In Godot,
self.x means setting a variable from outside the class. When using it inside properties with getters and setters, this can cause an infinite call to such setter.
Zylann | 2019-12-21 10:37