![]() |
Attention | Topic was automatically imported from the old Question2Answer platform. |
![]() |
Asked By | redsharktooth22 |
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:
extends Node2D
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