当前位置: 首页 > news >正文

【学Python自动化】 9.1 Python 与 Rust 类机制对比学习笔记

一、类的基本概念

Python 类

Python 的类使用简洁的语法,支持面向对象编程的所有特性:

  • 使用 class 关键字定义

  • 支持多重继承

  • 所有方法都是虚方法(virtual)

  • 方法的第一个参数是 self(约定)

  • 动态特性:运行时创建和修改


class MyClass:"""一个简单的示例类"""i = 12345  # 类变量def f(self):return 'hello world'

Rust 结构体和实现

Rust 没有传统的"类",但使用结构体(struct)和实现块(impl)实现类似功能:

  • 使用 struct 定义数据结构

  • 使用 impl 块定义方法

  • 更严格的访问控制和所有权机制

  • 支持特质(trait)实现多态


// 结构体定义
struct MyClass {i: i32,  // 实例字段
}// 实现块
impl MyClass {// 关联函数(类似静态方法)fn new() -> Self {Self { i: 12345 }}// 方法,第一个参数是 &selffn f(&self) -> String {"hello world".to_string()}
}### 二、命名空间和作用域
Python+ 使用字典实现命名空间+ 动态作用域解析+ 支持 global 和 nonlocal 关键字Rust+ 静态作用域和生命周期管理+ 模块系统提供命名空间+ 无全局变量,使用静态项或常量### 三、类定义和实例化
Python 实例化
```pythonx = MyClass()  # 创建实例
x.i = 10       # 动态添加属性

Rust 实例化


let x = MyClass { i: 10 };  // 创建实例
// x.i = 20;  // 错误:默认不可变
let mut x = MyClass { i: 10 };  // 可变实例
x.i = 20;  // 允许修改
1 方法和属性

Python 方法


class MyClass:def __init__(self, value):  # 构造函数self.data = valuedef method(self):           # 实例方法return self.data

Rust 方法


struct MyClass {data: i32,
}impl MyClass {// 关联函数(类似构造函数)fn new(value: i32) -> Self {Self { data: value }}// 方法,借用 selffn method(&self) -> i32 {self.data}// 可变方法,可变借用 selffn set_data(&mut self, value: i32) {self.data = value;}// 获取所有权的方法fn consume(self) -> i32 {self.data}
}
2 类和实例变量

Python 类变量和实例变量


class Dog:kind = 'canine'  # 类变量(所有实例共享)def __init__(self, name):self.name = name  # 实例变量

Rust 静态字段和实例字段


struct Dog {name: String,  // 实例字段
}impl Dog {// 静态关联函数fn kind() -> &'static str {"canine"}fn new(name: &str) -> Self {Self { name: name.to_string() }}
}

三、继承和多态

Python 继承


class Base:def method(self):return "base method"class Derived(Base):def method(self):return "derived method"

Rust 使用特质实现多态


// 定义特质
trait Base {fn method(&self) -> String;
}// 为结构体实现特质
struct Derived;impl Base for Derived {fn method(&self) -> String {"derived method".to_string()}
}

四、访问控制和私有性

Python 私有约定


class MyClass:def __init__(self):self._protected = "protected"  # 约定保护self.__private = "private"     # 名称改写

Rust 显式访问控制


mod my_module {pub struct MyClass {pub public_field: i32,    // 公开protected_field: i32,     // 模块内可见(默认)}impl MyClass {pub fn new() -> Self {Self { public_field: 1, protected_field: 2 }}}
}

五、迭代器和生成器

Python 迭代器和生成器


# 迭代器
class Reverse:def __init__(self, data):self.data = dataself.index = len(data)def __iter__(self):return selfdef __next__(self):if self.index == 0:raise StopIterationself.index -= 1return self.data[self.index]# 生成器
def reverse(data):for i in range(len(data)-1, -1, -1):yield data[i]

Rust 迭代器


// 实现迭代器特质
struct Reverse<'a> {data: &'a [char],index: usize,
}impl<'a> Reverse<'a> {fn new(data: &'a [char]) -> Self {Self { data, index: data.len() }}
}impl<'a> Iterator for Reverse<'a> {type Item = char;fn next(&mut self) -> Option<Self::Item> {if self.index == 0 {None} else {self.index -= 1;Some(self.data[self.index])}}
}

六、关键差异总结

特性PythonRust
类定义class 关键字struct + impl
继承直接支持多重继承通过特质(trait)实现
多态动态分发(运行时)静态分发(编译时)或特质对象
访问控制命名约定(_)显式 pub 关键字
方法定义显式 self 参数隐式 self(&self, &mut self, self)
内存管理垃圾回收所有权系统和借用检查器
迭代器协议(iter, nextIterator 特质

Rust 的面向对象编程更加显式和严格,强调编译时安全和性能,而 Python 提供了更大的灵活性和动态性。

http://www.dtcms.com/a/365510.html

相关文章:

  • PyTorch 和 Transformer的区别与联系
  • Linux 入门到精通,真的不用背命令!零基础小白靠「场景化学习法」,3 个月拿下运维 offer,第二十五天
  • 农业XR数字融合工作站,赋能农业专业实践学习
  • Qt为什么要引入QML语言?
  • 八、算法设计与分析
  • 瑞芯微rv1126 linux内核使用spidev驱动
  • 【Unity基础】两个关于UGUI中Text对非英文字体支持的问题
  • 在线性代数里聊聊word embedding
  • 在Excel和WPS表格中隔多行插入一个空白行
  • 【Linux 内存管理】2 进程地址空间 - vm_area_struct 数据结构
  • 【Zotero】插入中文参考文献遇到的问题
  • 【数据处理工具】依据图层批量分割要素,并自动处理碎图斑
  • Zynq中级开发七项必修课-第七课:AXI DMA (PL→PS) 数据上传
  • 深入掌握sed:Linux文本处理的流式编辑器利器
  • 权威认证!华宇TAS应用中间件获得商用密码产品认证证书
  • MongoDB 性能调优:十大实战经验总结 详细介绍
  • (Me)Adobe Media Encoder 2025音视频格式转码软件及视频编码软件,全新版免激活,安装即永久使用!
  • 面经分享二:Kafka、RabbitMQ 、RocketMQ 这三中消息中间件实现原理、区别与适用场景
  • windows server2008R2 远程提示用户名密码错误
  • 往届生还有机会进入计算机这个行业吗?还能找见好工作吗
  • 软件测试基础知识(数据库篇)
  • [光学原理与应用-377]:ZEMAX - 优化 - ZEMAX中的评价函数、类型、优化算法及其关系解析
  • Coze源码分析-资源库-创建提示词-前端源码
  • 聚焦诊断管理(DM)的传输层设计、诊断服务器实现、事件与通信管理、生命周期与报告五大核心模块
  • 集成学习算法简介
  • 水资源论证方法与报告编制技术及实际案例分析
  • ruoyi vue element 实现点击、返回首页收起已经展开的菜单栏
  • CI/CD流水线驱动自动化流程深度解析:选型、竞品、成本与资源消耗
  • Java项目打包成EXE全攻略​
  • 企业内网安全守护全面指南:从基础防护到智能管理的一站式解决方案