首页
学习
活动
专区
圈层
工具
发布
技术百科首页 >Mojo >Mojo 的 struct 与 Python 的 class 有什么不同?

Mojo 的 struct 与 Python 的 class 有什么不同?

词条归属:Mojo

Python 的 class 动态灵活,可以在运行时增删属性、混合类型并自由覆盖行为;Mojo 的 struct 则是静态替代方案,绑定在编译期完成,编译器因此可以激进优化。下面是逐项对照。

维度

Python class

Mojo struct

绑定时机

运行时动态分发,可运行时绑定实例字段

编译期绑定,运行时不能添加方法或字段

运行时修改

支持 monkey-patching 等动态改写

不支持运行时修改结构体

继承

支持子类化

不支持继承,改用实现 trait

类属性

支持被所有实例共享的类属性

不支持静态数据成员

字段声明

无需显式声明

所有字段必须用 var 显式声明

内存管理

由引用计数与垃圾回收器管理

采用值语义与所有权模型,字段与结构体实例同生命周期,在值最后一次被使用时析构,无需垃圾回收

静态方法

支持

支持(用 @staticmethod 声明),但不接收 self,也无法访问字段

两者都支持方法、运算符重载以及用于元编程的装饰器。Mojo 官方文档同时说明,未来 Mojo 也会支持与 Python class 行为一致的类类型,但在当下,struct 是自定义类型的首选形式。

相关文章
C++ 的 struct 和 typedef struct 有什么区别
C 标准(C89 §3.1.2.3, C99 §6.2.3, C11 §6.2.3)把不同类型的标识符(identifier)分到不同的命名空间(namespace)。
ClearSeve
2022-02-10
1.8K0
Python 中 a=a+b 与 a+=b 有什么不同?
只要熟悉 Python,那么你肯定知道 a=a+b 与 a+=b 都可以实现对对象 a 的自增操作,可以除此之外,他们有什么不同呢?如果这个是面试题,你会怎么回答呢?
somenzz
2021-08-19
2.3K0
javafx的使用原理是什么?javafx与java有什么不同?
在生活中人们接触java比较多,很多人却不知道javafx是什么。javafx是一种编程语言,使用这种语言能够开发丰富的网络程序,目前javafx包括两种类别,一种是javafx脚本,另一种是javafx mobile(可以运行于手机等移动设备),在以后的发展中,javafx可能会拥有更多的作用。那么javafx的使用原理是什么?javafx与java有什么不同?
用户8739405
2021-07-02
6.5K0
Python中的列表和Java中的数组有什么不同?
Python中的列表和Java中的数组在多种编程语言中都是常见的数据结构。虽然两者在某些方面有相似之处,但也存在许多显著的区别。下面将对Python中的列表和Java中的数组进行比较,以帮助理解它们之间的差异。
用户1289394
2024-01-21
3.5K0
编程语言Zig有什么与众不同的
编程语言专家曾对 Zig 编程语言的创造者 Andrew Kelley 说,在编译时运行代码是个蠢主意。尽管如此,Kelley 还是去实现了这个想法,而多年以后,这个蠢主意已经成为了 Zig 的招牌。这一特征在 Zig 中用关键字 comptime 标识,代表需要在编译时运行的代码或者是需要的变量。Zig 可以在编译时运行代码的能力让开发者们可以在不明确任何泛型或模板支撑的情况下,编写通用代码或是进行元编程。让我们来通过代码例子更直观地了解编译时运行是什么意思,以及其为什么重要。以这段简单的函数为例,在 a 和 b 两个数之间取最大值。不使用泛型或 comptime 代码的话,我们就需要将这个函数的具体变量类型写死,比如这里用的 Zig 中 32 位整数 i32 。
深度学习与Python
2022-11-28
4.6K0
点击加载更多
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
领券