En python, solo puede tener file1.py con una clase llamada "class1" como esta:
class class1: def __init_(self, var1, var2): self.var3 = var1 self.var4 = var2 self.callFunction(self.var3, self.var4) def callFunction(self, classVar1, classVar2): print(classVar1) print(classVar2) def anotherFunction(self, otherVar1, otherVar2): daString = otherVar1 + otherVar2 return daString if __name__ == '__main__': class1('passing var1', 'passing var2')Y podemos importarlo en file2.py con:
from folder import file1 from folder.file1 import *Y luego podemos llamar a la clase file1.py en file2.py y acceder literalmente a todo lo que contiene, incluidas las variables propias actualizadas como esta:
newThing = file1.class1('updated self var1', 'updated self var2') # lets print our updated self vars from file1.py class print(newThing.var3) # "updated self var1" print(newThing.var4) # "updated self var2" # lets call a function from file1.py's class and print result result = newThing.anotherFunction('test', '123') print(result) # test123Bastante simple. Ahora mi pregunta es: ¿cómo se puede hacer exactamente esto en node.js? Mi primer intento fallido fue este:
Archivo1.js:
class Class1 { constructor(var1, var2) { this.cVar1 = var1; this.cVar2 = var2; this.extraThing = 'extra text'; someFunction(this.cVar1, this.cVar2); // wont work, it doesnt recognize someFunction() } someFunction(passArg1, passArg2) { console.log(passArg1 + passArg2 + this.extraThing); // this.extraThing seems to be undefined, same with just extraThing } } module.exports = new Class1();Cargando File1.js en File2.js:
const importClass = require('File1.js'); module.exports = async function(var1, var2) { let classThing = new importClass(var1, var2); // will load, but unable to call a fnction inside of it let var3 = 'something'; let var4 = 'else'; classThing.someFunction(var3, var4); // wont work, cant access someFunction (its undefined) } Y mi segundo intento fallido fue abandonar la idea de Clase y simplemente hacer exports.Class1 = function (); en File1.js, que probablemente sería aún peor para lo que estoy tratando de hacer.
Soy nuevo en node.js, por lo que existe una gran posibilidad de que esté haciendo algo completamente estúpido y soy consciente de ello... pero he estado buscando en Internet durante mucho tiempo y parece que no puedo para encontrar lo que busco. ¿Es lo que estoy buscando (el equivalente a cómo se hace en python) incluso posible en node.js?
Para reescribir el código python que proporcionó a NodeJS, lo haría así:
folder/file1.js
class Class1 { constructor(arg1, arg2) { this.var3 = arg1; this.var4 = arg2; this.callFunction() } callFunction() { console.log(this.var3) console.log(this.var4) } anotherFunction(otherArg1, otherArg2) { const daString = otherArg1 + otherArg2; return daString } } if (require.main === module) new Class1("passing var1", "passing var2") module.exports = Class1; file2.js
const file1_Class1 = require("./folder/file1.js"); const newThing = new file1_Class1("updated self var1", "updated self var2") console.log(newThing.var3); console.log(newThing.var4); const result = newThing.anotherFunction("test", "123"); console.log(result);lo que dará exactamente el mismo resultado de registro que en Python:
1- ejecutando: $ node file2.js
updated self var1 updated self var2 updated self var1 updated self var2 test123
2- ejecutando directamente: $ node folder/file1.js (como "principal" )
updated self var1 updated self var2
Los valores actualizados de las propiedades de la clase se usan dentro de la Clase misma usando this . Es decir: this.var3 , this.callFunction() etc, tal como lo haría en Python usando self .
Desde una clase importada ( predeterminada ), crea una instancia usando la new palabra clave, y luego usa las variables y los métodos de función usando su nombre de instancia newThing.var3 , newThing.callFunction() , etc.