Here's how I'd approach your problem in Godot as a godot novice.
Have your root node for these types of objects be a very generic "object". Have only the attributes that are shared amongst all objects be in this node: weight, size, object name, and location. If all objects can be picked up, throw pick_up() in there too.
Give it a function called take_action(funct : String, params : Array ). When you send it an action, look through the children of the node to see if any of them .has_method(funct). If it does, use .call(funct, params) on that child.
So, for example if you were trying to call "eat()" on an object, it would search through the children and see if any had an eat() function and call the ones that do. So if you wanted some objects to be editable, give them a generic "edible" class in a script with attributes like "calories, bites left" and a function eat() and through it on a node.
If you're producing a menu of actions you can take on the object then you could ask the root node to go through the children and collect accessible functions. For example, in your edible class:
func getActionable(): if bitesLeft > 0: return "eat"