Python 入门者必看:类与对象从 0 到 1 完全指南(附实战代码)

双11提前购!买周边/年卡,一键领4重福利! 送200元神券包+10%红包返利+最高10年VIP!还能抽iPhone18Pro!仅限1次,速抢>> 阅读详情

作 为Python 入门者,你可能已经写过不少函数和脚本,但当代码量越来越大时,会发现重复的逻辑越来越多 —— 比如描述不同学生的信息,每次都要写相似的变量和打印语句;或者处理不同类型的商品,要复制粘贴几乎一样的计算逻辑。

这时候,类与对象就是你的 “救星”。它是 Python 面向对象编程(OOP)的核心,能帮你把代码结构化、复用化,让你的代码像搭积木一样清晰。

本文将用生活化的比喻 + 可运行的代码样例,带你从 0 到 1 掌握类与对象的所有核心知识点,看完就能写出整洁、可维护的 Python 代码。


一、类与对象:用 “蓝图” 和 “实物” 理解核心概念

1.1 什么是类?

类(Class)是一种模板或蓝图,用来描述一类事物的共同特征和行为。比如:

  • “学生类”:所有学生都有姓名、年龄、学校这些特征,都有学习、自我介绍这些行为;
  • “汽车类”:所有汽车都有品牌、颜色、价格这些特征,都有启动、加速这些行为。

用生活化的比喻:类就像房子的设计图,它规定了房子有几个房间、多大面积、用什么材料,但它本身不是一个可以住的房子。

1.2 什么是对象?

对象(Object)是类的具体实例,是根据蓝图创建出来的 “实物”。比如:

  • 根据 “学生类” 创建出 “张三”“李四” 这两个具体的学生对象;
  • 根据 “汽车类” 创建出 “特斯拉 Model 3”“比亚迪汉” 这两个具体的汽车对象。

比喻延伸:对象就是按照设计图盖出来的房子,每个房子都符合设计图的要求,但可以有自己的装修风格、家具摆放。

1.3 第一个类与对象代码样例

我们先写一个最简单的 “学生类”,然后创建具体的学生对象:

# 1. 定义类:用class关键字,类名首字母大写(Python约定)
class Student:
    # 类属性:所有学生共享的特征(比如学校名称)
    school = "北京大学"
    
    # 实例方法:学生的行为(自我介绍)
    def introduce(self):
        print(f"大家好,我叫{self.name},今年{self.age}岁,来自{self.school}。")

# 2. 创建对象(实例化):类名+()
zs = Student()
ls = Student()

# 3. 给对象添加实例属性:每个对象独有的特征
zs.name = "张三"
zs.age = 20

ls.name = "李四"
ls.age = 21

# 4. 调用对象的方法
zs.introduce()  # 输出:大家好,我叫张三,今年20岁,来自北京大学。
ls.introduce()  # 输出:大家好,我叫李四,今年21岁,来自北京大学。

代码解释:

  • class Student::定义一个名为 Student 的类;
  • school = "北京大学":类属性,所有 Student 对象共享这个值;
  • def introduce(self)::实例方法,self是必须的第一个参数,代表当前对象本身(相当于 Java 里的this);
  • zs = Student():创建一个名为 zs 的 Student 对象;
  • zs.name = "张三":给 zs 对象添加实例属性 name;
  • zs.introduce():调用 zs 对象的 introduce 方法,会自动把 zs 作为 self 传入。

二、核心知识点拆解:从基础到进阶

2.1 构造函数:创建对象时自动初始化属性

上面的代码中,我们需要手动给每个对象添加 name 和 age 属性,非常麻烦。这时候可以用构造函数__init__,它会在创建对象时自动调用,帮我们初始化属性。

class Student:
    school = "北京大学"
    
    # 构造函数:创建对象时自动调用,self是必须的,后面是自定义参数
    def __init__(self, name, age):
        # 给当前对象绑定实例属性
        self.name = name
        self.age = age
    
    def introduce(self):
        print(f"大家好,我叫{self.name},今年{self.age}岁,来自{self.school}。")

# 创建对象时直接传入参数,自动初始化属性
zs = Student("张三", 20)
ls = Student("李四", 21)

zs.introduce()  # 输出:大家好,我叫张三,今年20岁,来自北京大学。
ls.introduce()  # 输出:大家好,我叫李四,今年21岁,来自北京大学。

注意:构造函数的名字是固定的__init__(前后各两个下划线),不能写错;self必须是第一个参数,代表当前对象。

2.2 类属性 vs 实例属性:共享与独有的区别

在类中,属性分为两种:类属性和实例属性,它们的作用范围完全不同。

类属性:所有对象共享

类属性定义在类的内部、方法的外部,所有对象共享同一个值:

class Student:
    # 类属性:所有学生共享
    school = "北京大学"
    
    def __init__(self, name, age):
        self.name = name
        self.age = age

zs = Student("张三", 20)
ls = Student("李四", 21)

# 所有对象访问类属性,结果一致
print(zs.school)  # 北京大学
print(ls.school)  # 北京大学

# 修改类属性,所有对象都会受到影响(除非对象自己覆盖了实例属性)
Student.school = "复旦大学"
print(zs.school)  # 复旦大学
print(ls.school)  # 复旦大学
实例属性:每个对象独有

实例属性定义在构造函数或实例方法中,每个对象有自己独立的副本:

zs = Student("张三", 20)
ls = Student("李四", 21)

# 修改zs的实例属性,不会影响ls
zs.age = 22
print(zs.age)  # 22
print(ls.age)  # 21

# 如果对象自己定义了和类属性同名的实例属性,会优先使用实例属性
zs.school = "清华大学"
print(zs.school)  # 清华大学(使用实例属性)
print(ls.school)  # 复旦大学(使用类属性)

2.3 三种方法:实例方法、类方法、静态方法

类中的方法分为三种,分别对应不同的使用场景:

1. 实例方法:操作对象的属性

最常用的方法,第一个参数必须是self,用来操作当前对象的实例属性:

class Student:
    def __init__(self, name, age):
        self.name = name
        self.age = age
    
    # 实例方法:判断学生是否成年
    def is_adult(self):
        return self.age >= 18

zs = Student("张三", 20)
print(zs.is_adult())  # True
2. 类方法:操作类的属性

用@classmethod装饰器标记,第一个参数是cls(代表类本身),用来操作类属性:

class Student:
    school = "北京大学"
    
    def __init__(self, name, age):
        self.name = name
        self.age = age
    
    # 类方法:修改所有学生的学校
    @classmethod
    def change_school(cls, new_school):
        cls.school = new_school

Student.change_school("复旦大学")
zs = Student("张三", 20)
print(zs.school)  # 复旦大学
3. 静态方法:独立的工具函数

用@staticmethod装饰器标记,不需要self或cls参数,相当于类内部的普通函数,和类或对象的属性无关:

class Student:
    # 静态方法:计算两个学生的年龄差
    @staticmethod
    def calculate_age_diff(student1, student2):
        return abs(student1.age - student2.age)

zs = Student("张三", 20)
ls = Student("李四", 21)
print(Student.calculate_age_diff(zs, ls))  # 1

2.4 继承:复用代码的终极武器

继承是面向对象编程的核心特性之一,它允许一个类(子类)继承另一个类(父类)的属性和方法,从而避免重复代码。

比如我们要定义一个 “研究生类”,它和 “学生类” 有很多共同的属性和方法,这时候就可以让研究生类继承学生类:

# 父类:学生类
class Student:
    school = "北京大学"
    
    def __init__(self, name, age):
        self.name = name
        self.age = age
    
    def introduce(self):
        print(f"大家好,我叫{self.name},今年{self.age}岁,来自{self.school}。")

# 子类:研究生类,继承自Student
class GraduateStudent(Student):
    # 子类的构造函数,调用父类构造函数初始化共同属性
    def __init__(self, name, age, thesis_title):
        super().__init__(name, age)  # super()代表父类,调用父类的__init__方法
        self.thesis_title = thesis_title  # 子类独有的属性
    
    # 重写父类的方法:实现自己的逻辑
    def introduce(self):
        super().introduce()  # 先调用父类的自我介绍
        print(f"我是研究生,我的论文题目是《{self.thesis_title}》。")

# 创建研究生对象
gs = GraduateStudent("王五", 24, "Python面向对象编程研究")
gs.introduce()

运行结果:

大家好,我叫王五,今年24岁,来自北京大学。
我是研究生,我的论文题目是《Python面向对象编程研究》。

核心知识点:

  • class GraduateStudent(Student)::GraduateStudent 类继承自 Student 类;
  • super().__init__(name, age):调用父类的构造函数,复用父类的属性初始化逻辑;
  • 重写(Override):子类可以重新定义父类的方法,实现自己的业务逻辑,比如上面的introduce方法。

2.5 多态:同一个方法,不同对象有不同表现

多态是指同一个方法调用,不同对象会有不同的执行结果。它依赖于继承和方法重写,能让代码更加灵活。

比如我们定义一个 “打印所有学生信息” 的函数,不管是普通学生还是研究生,都能统一处理:

def print_student_info(student):
    student.introduce()  # 调用对象的introduce方法,具体执行逻辑由对象类型决定

# 创建不同类型的学生对象
zs = Student("张三", 20)
gs = GraduateStudent("王五", 24, "Python面向对象编程研究")

# 统一调用函数,自动适配不同对象
print_student_info(zs)
print_student_info(gs)

运行结果:

大家好,我叫张三,今年20岁,来自北京大学。
大家好,我叫王五,今年24岁,来自北京大学。
我是研究生,我的论文题目是《Python面向对象编程研究》。

这种 “一个接口,多种实现” 的方式,就是多态的核心思想,能大幅提高代码的扩展性 —— 以后如果新增 “博士生类”,只需要继承 Student 类并重写 introduce 方法,print_student_info 函数完全不需要修改。


三、实战案例:用类与对象实现学生管理系统

现在我们把前面的知识点整合起来,实现一个简单的学生管理系统,包含添加学生、显示所有学生信息、计算平均年龄三个功能:

# 父类:学生类
class Student:
    school = "北京大学"
    
    def __init__(self, name, age):
        self.name = name
        self.age = age
    
    def introduce(self):
        print(f"姓名:{self.name},年龄:{self.age},身份:普通学生,学校:{self.school}")

# 子类:研究生类
class GraduateStudent(Student):
    def __init__(self, name, age, thesis_title):
        super().__init__(name, age)
        self.thesis_title = thesis_title
    
    def introduce(self):
        print(f"姓名:{self.name},年龄:{self.age},身份:研究生,学校:{self.school},论文题目:{self.thesis_title}")

# 学生管理类:封装管理逻辑
class StudentManager:
    def __init__(self):
        self.students = []  # 存储所有学生对象
    
    # 添加学生
    def add_student(self, student):
        self.students.append(student)
        print(f"成功添加学生:{student.name}")
    
    # 显示所有学生信息
    def show_all_students(self):
        if not self.students:
            print("暂无学生信息")
            return
        print("\n=== 所有学生信息 ===")
        for student in self.students:
            student.introduce()
    
    # 计算学生平均年龄
    def calculate_average_age(self):
        if not self.students:
            return 0
        total_age = sum(student.age for student in self.students)
        return round(total_age / len(self.students), 2)

# 测试系统
if __name__ == "__main__":
    manager = StudentManager()
    
    # 添加普通学生
    zs = Student("张三", 20)
    manager.add_student(zs)
    
    # 添加研究生
    gs = GraduateStudent("王五", 24, "Python面向对象编程研究")
    manager.add_student(gs)
    
    # 显示所有学生信息
    manager.show_all_students()
    
    # 计算平均年龄
    avg_age = manager.calculate_average_age()
    print(f"\n学生平均年龄:{avg_age}岁")

运行结果:

成功添加学生:张三
成功添加学生:王五

=== 所有学生信息 ===
姓名:张三,年龄:20,身份:普通学生,学校:北京大学
姓名:王五,年龄:24,身份:研究生,学校:北京大学,论文题目:Python面向对象编程研究

学生平均年龄:22.0岁

这个案例完美体现了类与对象的优势:

  • 封装:学生的属性和行为封装在 Student 类中,管理逻辑封装在 StudentManager 类中,代码结构清晰;
  • 继承:GraduateStudent 类复用了 Student 类的属性和方法,避免重复代码;
  • 多态:show_all_students 函数只需要调用 introduce 方法,不需要关心对象是普通学生还是研究生;
  • 可扩展:以后新增 “博士生类”“留学生类”,只需要继承 Student 类,StudentManager 完全不需要修改。

四、入门者常见误区避坑

误区 1:忘记在实例方法中加 self 参数

如果实例方法没有写 self 参数,调用时会报错:

class Student:
    def introduce():  # 错误:没有self参数
        print("大家好")

zs = Student()
zs.introduce()  # 报错:TypeError: Student.introduce() takes 0 positional arguments but 1 was given

原因:调用实例方法时,Python 会自动把对象作为第一个参数传入,所以方法必须定义 self 参数来接收。

误区 2:混淆类属性和实例属性

如果想修改类属性,直接通过类名修改,不要通过对象修改(除非你想给对象添加实例属性):

class Student:
    school = "北京大学"

zs = Student()
zs.school = "清华大学"  # 这是给zs对象添加实例属性,不是修改类属性
print(Student.school)  # 北京大学(类属性没变化)

误区 3:构造函数中忘记调用父类构造函数

子类继承父类时,如果自己定义了构造函数,必须调用父类的构造函数,否则父类的属性不会被初始化:

class GraduateStudent(Student):
    def __init__(self, name, age, thesis_title):
        # 错误:没有调用super().__init__,父类的name和age属性不会被初始化
        self.thesis_title = thesis_title

gs = GraduateStudent("王五", 24, "Python研究")
print(gs.name)  # 报错:AttributeError: 'GraduateStudent' object has no attribute 'name'

五、总结:类与对象的核心价值

对于 Python 入门者来说,类与对象的核心价值在于:

  1. 代码复用:通过继承避免重复编写相似逻辑;
  2. 代码结构化:把相关的属性和方法封装在类中,代码更易读、易维护;
  3. 扩展性强:新增功能只需要新增类或方法,不需要修改原有代码;
  4. 逻辑清晰:用 “事物 - 特征 - 行为” 的方式建模,更符合人类的思维习惯。

学习类与对象的步骤建议:

  1. 先掌握类的定义、对象的创建、构造函数、实例方法这些基础知识点;
  2. 再学习类属性、类方法、静态方法,理解不同属性和方法的区别;
  3. 最后深入继承、多态,并通过实战案例巩固知识点。

现在就打开你的 Python 编辑器,把本文的代码敲一遍,你会发现:原来面向对象编程并没有想象中那么难!

买完就返现!双11神券包+10%余额红包大派送! 买周边/年卡再抽iPhone18Pro,最高赢10年VIP!手慢无,戳我领取>> 阅读详情

相关推荐

Python类与对象详解

Python类与对象详解

Python编程学习的博客 3866

【Python从0到1】第一篇:基础语法(一)

原因是编程中, 一个程序里通常会同时创建出很多个变量. 如果只是使用单个字母表示, 在变量多了的时候, 就很难记住哪个变量是干啥的, 从而给维护程序带来了一定的困难. 因此我们更建议使用带有明确描述性的名字, 来表示变量的用途.衡量内存的一个重要指标就是内存空间的大小, 比如我的电脑内存是 16GB. 这个数字越大, 意味着内存的存储空间就越大, 能够存放的数据(变量) 就越多。注释是一种特殊的代码, 它不会影响到程序的执行, 但是能够起到解释说明的作用, 能够帮助程序猿理解程序代码的执行逻辑.

Pass-by 2692

Python面向对象基础:类与对象

在现代编程中,面向对象编程(OOP)是一种常见的编程范式,它通过将数据和操作数据的代码封装在一起,提供了一种更符合人类思维的模型。Python是一个高度支持面向对象编程的语言,本文将深入探讨Python中的类与对象,帮助读者理解这一重要的编程概念。类是面向对象编程的基本构建块。它可以被看作是创建对象的蓝图。通过类,我们可以定义对象的属性(数据)和方法(功能)。在Python中,定义类使用class关键字。python复制")在上面的示例中,我们定义了一个名为Dog的类。该类有一个构造方法__init__

weixin_71228606的博客 1406

Python编程基础:从0到1的入门之路,从零基础到精通,收藏这篇就够了!

(啪!拍大腿声)大兄弟老妹儿们,今儿咱不整烧烤不唠闲嗑,给大伙整点儿硬货!咱就唠唠这个Python编程,保准让你从"两眼一抹黑"整到"哎妈呀我也会了"!(掏出保温杯吨吨吨喝两口)走着!

leah126的博客 975

ros_control硬件接口实战:从零构建机器人控制框架

本文详细介绍了ros_control硬件接口在机器人控制框架中的核心作用与实践方法。通过解析硬件接口类型、实现标准接口、构建主控制循环及自定义功能扩展,帮助开发者从零构建高效的机器人控制系统,提升硬件与ROS的协同效率。

lstm7chronicler的博客 494

推荐系统:NDCG评价指标及其Python实现方法

除了推荐任务,在二分类任务中,也可以计算该指标,代码如下: # ndcg def get_dcg(y_pred, y_true, k): #注意y_pred与y_true必须是一一对应的,并且y_pred越大越接近label=1(用相关性的说法就是,与label=1越相关) df = pd.DataFrame({"y_pred":y_pred, "y_true":y_true}) ...

lanyuelvyun的博客 8236

从零到一学习python(基础篇)

这或许就是命运最好的安排。有效客户名单: [{'name': '鱼鱼', 'phone': '13900139000'}, {'name': '羡鱼肘子', 'phone': '13800138000'}]'羡鱼肘子':{'qq_number':3063320431,'qq_name':'羡鱼肘子','qq_age':18,'qq_sex':'男'},'鱼鱼':{'qq_number':3063320431,'qq_name':'鱼鱼','qq_age':18,'qq_sex':'女'},

永远怀着至诚之心拥抱世界 1364

一文掌握python图形界面开发PyQt6--(一)基本操作、控件、信号与槽、常用控件、布局管理、事件处理、文件对话框

一文掌握python图形界面开发PyQt6--(一)基本操作、控件、信号与槽、常用控件、布局管理、事件处理、文件对话框

qq_38120851的博客 4023

Python编程-从0到1基础知识串讲(变量,分支循环,可变参数问题,传递字典,列表,模块创建,模块引用)

python作为一门弱类型语言,对于变量的处理是自动的,对于同一变量名修改时不会限制修改类型,它只有作为。Python编程-从0到1基础知识串讲(变量,分支循环,可变参数问题,传递字典,列表,模块创建,模块引用

m0_74220316的博客 529

5G NR 双连接与载波聚合:PCell、SCell、PScell、SpCell 角色全解析

本文全面解析了5G NR中双连接与载波聚合技术的关键概念,详细介绍了PCell、SCell、PScell和SpCell的角色与功能。通过实际案例和配置示例,帮助读者理解这些小区在提升网络覆盖和速率方面的作用,以及在实际组网中的优化策略。

weixin_33220360的博客 367

【驭风计划 算法训练营】周测4:习题11-4、8-4、12-4

给出 nn 个非负整数 x1,x2,⋯,xnx1,x2,⋯,xn,有 qq 个询问,第 jj 个询问给出一个非负整数 yjyj,求其中,xor 表示按位异或运算。

Mege1的博客 1036

Python小白逆袭指南:从0到1的蜕变之路

本文为Python零基础学习指南,全面介绍了Python的学习路径和应用前景。文章首先展示了Python在人工智能、数据分析和自动化办公等领域的广泛应用,强调其作为高效编程工具的价值。随后详细规划了学习流程:从环境配置、基础语法到数据结构、函数模块和面向对象编程等核心概念,并建议通过实战项目巩固技能。文中推荐了优质学习资源如《"笨办法"学Python》、慕课网等平台,并强调参与开源项目的重要性。最后提出学习建议:保持耐心、注重实践、定期总结,帮助读者系统掌握Python编程,为职业发展或

大雨淅淅的博客 1443

0.1 专栏导读:为什么需要从 MM 理解 HMM

本文探讨了GPU计算框架中CPU与GPU内存管理的困境,介绍了Linux内核的HMM(Heterogeneous Memory Management)解决方案。传统显式拷贝模型存在编程复杂、指针失效等问题,而HMM通过共享虚拟地址空间、自动页面迁移等机制实现透明内存管理。文章分析了HMM依赖的Linux内存管理基础设施,包括页表遍历、MMU通知、ZONE_DEVICE等核心组件,并梳理了从经典MM到支持异构设备的进化历程。最后给出了学习HMM的8层知识体系,强调理解底层MM机制是掌握HMM的关键。

图形/计算GPU的驱动与虚拟化技术分享园地 730

7.1 类与对象:Python 面向对象编程的魔法

面向对象编程(OOP)是 Python 编程中的一大亮点,类与对象是其核心概念。本文将通过通俗易懂的语言和幽默风趣的故事,深入浅出地介绍 Python 中的类与对象,并提供丰富的代码示例和图表示例,帮助读者全面掌握这一重要概念。

在路上的专栏 1286

OpenClaw进阶实战(二十五):抖音企业号——私信回复与视频评论分析

摘要:本文介绍抖音企业号自动化运营方案,突破抖音强风控体系的技术挑战。针对内容生产、私信互动和账号矩阵三大场景,提出混合架构解决方案: 私信自动化:结合关键词触发与随机延迟(45秒±15),实现拟人化回复,支持价格咨询/商务合作等高优先级消息识别 混合技术栈:官方API(合规)+真机RPA(覆盖长尾需求)+AI辅助生成(脚本→剪辑→发布闭环) 安全策略:通过设备指纹模拟、行为间隔随机化和内容差异化处理规避风控,提供每日200条的安全操作阈值。配套OpenClaw技能实现一键部署,包含cookie配置、回复规

PeterPan的博客 133

K-Core, K-Shell & K-Crust傻傻分不清楚

K-Core(K-核)就是所有大于等于K的K-Shell的并集;K-Crust(K-皮)就是所有小于等于K的K-shell的并集。

欢迎订阅 -- 小源笔迹 2253

Python入门:从0到1掌握Pycharm,Python开发神器的深度使用指南

Python入门:从0到1掌握Pycharm,Python开发神器的深度使用指南,本文为 Python 入门者深度解析 PyCharm 的使用技巧。从开发前准备讲起,详细介绍编码格式配置、自定义注释设置、个性化脚本开头说明等环境配置要点;推荐实用插件及安装方法,教你设置保存时自动格式化代码;还汇总了编辑、查找、运行调试等常用快捷键。掌握这些技巧,能帮你快速上手 PyCharm,大幅提升 Python 开发效率,是入门者必备的实用指南。

不踩坑,不知道坑有多深;不总结,踩过的坑白踩。 4万+

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

Python面向对象编程(OOP)终极指南:从类与对象入门到实战应用

Python面向对象编程(OOP)终极指南:从类与对象入门到实战应用

学习成长日记 2527

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

【Python类(Class)完全指南】面向对象编程入门

本文通过10+个实战案例,系统讲解Python类的核心概念,涵盖属性、方法、继承、多态等知识点,帮助初学者快速掌握面向对象编程。

赶紧的博客 1608

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

Python 类与对象概念全解析:从零到实战

class Dog:# 类属性(所有实例共享)# 初始化方法(构造函数)# 实例属性# 实例方法print(f"class Dog : # 类属性(所有实例共享) species = "Canis familiaris" # 初始化方法(构造函数) def __init__(self , name , age) : # 实例属性 self . name = nameself . age = age # 实例方法 def bark(self) : print(f" {

YAnt的博客 1509

【Python面向对象编程】类与对象的深度探索指南

本文通过12个实战案例,系统讲解Python类的核心概念与高级应用,涵盖封装、继承、多态、装饰器等知识点,帮助初学者快速掌握面向对象编程精髓。

赶紧的博客 1419

用 Python 玩转面向对象:类、对象与继承完全指南

本文系统介绍了Python中类的核心用法,从基础概念到进阶应用。首先解释了类与对象的关系,类作为设计图纸而对象是具体实例。详细讲解了属性(实例属性和类属性)的定义与访问方式,以及构造方法__init__的作用。进阶部分涵盖继承机制(单继承与多继承)、方法重写和多态的实现。最后演示了如何将类模块化,通过import在不同文件中组织类,并展示了类与类之间的组合关系。文章提供了大量代码示例,帮助读者理解如何在项目中优雅地使用类,实现代码复用和逻辑清晰的组织结构。

caitao1998的博客 1081

Python编程实战:从类与对象到设计优雅代码

A:当需要管理多个相关数据项(如用户的姓名、年龄、地址)且这些数据需要共同行为(如计算年龄、验证邮箱)时,使用类更合适。简单任务或一次性计算用函数即可。这套类与对象的设计方法,已在多个生产项目验证有效性。实际开发中,建议从简单类开始,逐步添加复杂特性,保持代码的可读性和可维护性。想象你正在开发一个电商系统,需要管理商品、用户和订单。类是创建对象的模板,就像汽车的设计图纸。A:在类名前加双下划线(

这家伙很懒,什么都没有留下 788

【Python实战进阶】11、Python面向对象编程:从生活类比到代码实战,一篇搞定类和对象!

本文摘要: Python面向对象编程(OOP)通过类和对象将现实世界概念映射到代码中。文章从生活类比出发,解释类如"汽车蓝图"、对象如"具体汽车"的概念。通过学生管理系统案例,对比面向过程与面向对象编程的优劣,展示OOP在代码组织、维护和复用上的优势。详细讲解类属性与实例属性、三种方法类型(实例/类/静态方法)的区别,以及构造方法__init__的初始化作用。最后强调封装对数据保护的重要性,帮助读者建立完整的面向对象思维模型。全文用接地气的类比和实用代码示例,让抽象概

2025博客之星Top81。专注AI工程化与架构实战。从分布式思维到模型部署,用工程化视角为你厘清AI落地的真实路径。 1286

Python类与对象详解及实践指南

类与对象是构建可维护、可扩展系统的基石,深入理解其原理并遵循最佳实践,将显著提升代码质量和开发效率。

闲人编程的博客 1309

python语言基础-2 面向对象-2.1 类与对象

声明:本内容非盈利性质,也不支持任何组织或个人将其用作盈利用途。本内容来源于参考书或网站,会尽量附上原文链接,并鼓励大家看原文。侵删。

qq_29567799的博客 1712
上一篇: 小白入门 AI 必看:大模型原理 + 提示词工程全攻略,看完就能写出高质量 Prompt
下一篇: 新手从 0 到 1:用 PyCharm 可视化创建与连接数据库(超详细步骤)
Yulia 学习呀
博客等级 码龄4年 107粉丝 76原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值