Python 的 class 动态灵活,可以在运行时增删属性、混合类型并自由覆盖行为;Mojo 的 struct 则是静态替代方案,绑定在编译期完成,编译器因此可以激进优化。下面是逐项对照。
维度 | Python class | Mojo struct |
|---|---|---|
绑定时机 | 运行时动态分发,可运行时绑定实例字段 | 编译期绑定,运行时不能添加方法或字段 |
运行时修改 | 支持 monkey-patching 等动态改写 | 不支持运行时修改结构体 |
继承 | 支持子类化 | 不支持继承,改用实现 trait |
类属性 | 支持被所有实例共享的类属性 | 不支持静态数据成员 |
字段声明 | 无需显式声明 | 所有字段必须用 var 显式声明 |
内存管理 | 由引用计数与垃圾回收器管理 | 采用值语义与所有权模型,字段与结构体实例同生命周期,在值最后一次被使用时析构,无需垃圾回收 |
静态方法 | 支持 | 支持(用 @staticmethod 声明),但不接收 self,也无法访问字段 |
两者都支持方法、运算符重载以及用于元编程的装饰器。Mojo 官方文档同时说明,未来 Mojo 也会支持与 Python class 行为一致的类类型,但在当下,struct 是自定义类型的首选形式。