You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Node.js如何像Python一样导入文件、执行逻辑并访问更新后变量

Node.js 实现与Python类导入等价功能的方案

原Python实现逻辑回顾

在Python中可在单文件内定义类,导入后完成实例化、访问实例属性、调用实例方法等操作,对应代码如下:
file1.py 定义类:

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')

导入语句:

from folder import file1
from folder.file1 import *

实例化调用示例:

newThing = file1.class1('updated self var1', 'updated self var2')
# 打印实例属性
print(newThing.var3) # "updated self var1"
print(newThing.var4) # "updated self var2"

# 调用实例方法并打印结果
result = newThing.anotherFunction('test', '123')
print(result) # test123

原有Node.js代码的错误点

Node.js完全可以实现和上述Python逻辑完全一致的效果,你的代码报错是因为3个语法规则层面的错误,和能力无关:

  • 导出逻辑错误:你在File1.js最后写的是module.exports = new Class1();,这行代码导出的是Class1的一个实例对象,不是类本身,外部执行new importClass()相当于对已经实例化的对象再次做实例化操作,必然报错。
  • 类内部方法调用错误:JS类中的实例方法必须通过this.方法名()的形式调用,直接写someFunction()时,JS会去全局作用域查找同名函数,找不到就会抛出未定义错误。
  • 模块引入路径错误:require引入本地文件必须加相对路径前缀./,直接写require('File1.js')时,Node会默认去node_modules目录查找对应模块,自然找不到本地的File1.js文件。

正确实现代码

File1.js(对应Python的file1.py)

注意导出类本身而非实例,类内部调用实例方法加this.前缀,同时实现和Pythonif __name__ == '__main__'等价的直接运行逻辑:

class Class1 {
    constructor(var1, var2) {
        this.cVar1 = var1;
        this.cVar2 = var2;
        this.extraThing = 'extra text';
        // 内部调用实例方法必须加this前缀
        this.someFunction(this.cVar1, this.cVar2);
    }
    someFunction(passArg1, passArg2) {
        console.log(passArg1 + passArg2 + this.extraThing);
    }
    anotherFunction(otherVar1, otherVar2) {
        return otherVar1 + otherVar2;
    }
}
// 导出类本身,不要提前实例化
module.exports = Class1;

// 直接运行当前文件时执行的逻辑,对应Python的__main__判断
if (require.main === module) {
    new Class1('passing var1', 'passing var2');
}

File2.js(对应Python的file2.py)

引入模块时写对本地路径,实例化后即可像Python一样访问所有实例属性、调用实例方法:

// 引入本地模块必须加相对路径前缀
const Class1 = require('./File1.js');

// 实例化类,和Python实例化逻辑完全一致
const classThing = new Class1('updated self var1', 'updated self var2');

// 访问实例属性
console.log(classThing.cVar1); // 输出:updated self var1
console.log(classThing.cVar2); // 输出:updated self var2

// 调用实例方法
const result = classThing.anotherFunction('test', '123');
console.log(result); // 输出:test123

如果需要实现Python中from folder.file1 import *的直接导入效果,只需要在对应文件夹下新增index.js做转发导出即可:

// folder/index.js
module.exports = require('./File1.js');

之后就可以直接通过const Class1 = require('./folder');完成导入,不需要写完整文件名。


内容的提问来源于stack exchange,提问作者j. cole

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.02 01:45:52