news 2026/7/19 2:16:05

面向对象编程入门:从类与对象到构造函数

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
面向对象编程入门:从类与对象到构造函数

一、什么是面向对象编程?

面向对象编程是一种以“对象”为中心的编程思想。它把数据(属性)和操作数据的行为(方法)封装在一起,形成一个独立的单元——对象。多个相似的对象可以归为一类,从而实现代码的重用和模块化。

OOP 的四大基本特征是:

  • 封装(Encapsulation)
  • 继承(Inheritance)
  • 多态(Polymorphism)
  • 抽象(Abstraction)

本文主要介绍最基础的部分:类、对象、属性、方法和构造函数。


二、类(Class)与对象(Object)

1. 类是什么?

类(Class)是创建对象的“蓝图”或“模板”。它定义了一组具有相同属性和行为的对象的结构。

举个例子:我们可以定义一个Person(人)类,描述所有人的共同特征,比如姓名、年龄,以及行为如说话、走路等。

class Person:

pass # 表示暂时不写内容

2. 对象是什么?

对象(Object)是类的具体实例。你可以根据类创建多个对象,每个对象拥有自己的数据。

例如,从Person类中可以创建两个对象:小明 和 小红。

xiaoming = Person()

xiaohong = Person()

此时,xiaomingxiaohong就是Person类的两个不同对象。


三、属性(Attributes)

属性是对象所拥有的数据,用来描述对象的状态。

1. 实例属性

实例属性是每个对象独有的。比如每个人的姓名、年龄都可能不同。

我们可以在类中通过构造函数来初始化这些属性。

class Person:

def __init__(self, name, age):

self.name = name # 实例属性:姓名

self.age = age # 实例属性:年龄

注意:self表示当前对象本身。self.name意味着“这个对象的 name 属性”。

创建对象时传入参数:

xiaoming = Person("小明", 18)

xiaohong = Person("小红", 16)

print(xiaoming.name) # 输出:小明

print(xiaohong.age) # 输出:16


四、方法(Methods)

方法是对象可以执行的操作,本质上是定义在类中的函数。

1. 实例方法

实例方法用于操作对象的数据,第一个参数必须是self

class Person:

def __init__(self, name, age):

self.name = name

self.age = age

def greet(self):

print(f"你好,我叫{self.name},今年{self.age}岁。")

def have_birthday(self):

self.age += 1

print(f"{self.name}过生日了!现在{self.age}岁了。")

调用方法:

xiaoming = Person("小明", 18)

xiaoming.greet() # 输出:你好,我叫小明,今年18岁。

xiaoming.have_birthday() # 输出:小明过生日了!现在19岁了。


五、构造函数(Constructor)

构造函数是在创建对象时自动调用的特殊方法,用于初始化对象的属性。

在 Python 中,构造函数是__init__方法(前后各有两个下划线)。

def __init__(self, name, age):

self.name = name

self.age = age

当执行Person("小明", 18)时,Python 会自动调用__init__方法,并将"小明"18分别赋值给nameage

构造函数不是必须的,但强烈建议使用它来确保对象创建时具有合理的初始状态。


六、完整示例:学生类

让我们综合以上知识,创建一个更实用的例子:Student类。

class Student:

# 构造函数:初始化属性

def __init__(self, name, student_id, grade=0):

self.name = name

self.student_id = student_id

self.grade = grade

# 方法:显示学生信息

def show_info(self):

print(f"学生姓名:{self.name}")

print(f"学号:{self.student_id}")

print(f"成绩:{self.grade}")

# 方法:设置成绩

def set_grade(self, new_grade):

if 0 <= new_grade <= 100:

self.grade = new_grade

print(f"成绩已更新为 {new_grade}")

else:

print("成绩必须在 0 到 100 之间!")

# 方法:判断是否及格

def is_passing(self):

return self.grade >= 60

# 使用示例

s1 = Student("张三", "S001", 85)

s1.show_info()

s1.set_grade(90)

print("是否及格?", s1.is_passing()) # 输出:True


七、总结

概念说明
类(Class)创建对象的模板,定义属性和方法
对象(Object)类的实例,具体的存在
属性(Attribute)对象的数据,如名字、年龄
方法(Method)对象的行为,即类中的函数
构造函数__init__创建对象时自动调用,用于初始化属性

八、学习建议

  1. 多动手实践:尝试自己定义一些简单的类,比如CarDogBook
  2. 从生活建模:思考现实中的事物如何转化为类和对象。
  3. 循序渐进:掌握基础后,再学习继承、多态等高级特性。
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/8 9:03:34

Keil5汉化包安装指南:手把手教程(从零实现)

让Keil Vision5说中文&#xff1a;手把手教你安全安装汉化包&#xff08;附实战避坑指南&#xff09;你有没有过这样的经历&#xff1f;第一次打开Keil&#xff0c;面对满屏的“Project”、“Target”、“Debug Settings”&#xff0c;脑袋里全是问号。点一个菜单都要反复查词典…

作者头像 李华
网站建设 2026/7/17 5:32:39

B站视频下载完整教程:小白也能轻松搞定4K高清

B站视频下载完整教程&#xff1a;小白也能轻松搞定4K高清 【免费下载链接】bilibili-downloader B站视频下载&#xff0c;支持下载大会员清晰度4K&#xff0c;持续更新中 项目地址: https://gitcode.com/gh_mirrors/bil/bilibili-downloader 还在为B站精彩视频无法离线观…

作者头像 李华
网站建设 2026/7/8 9:00:57

PowerToys中文版终极指南:让Windows效率提升300%的秘密武器

PowerToys中文版终极指南&#xff1a;让Windows效率提升300%的秘密武器 【免费下载链接】PowerToys-CN PowerToys Simplified Chinese Translation 微软增强工具箱 自制汉化 项目地址: https://gitcode.com/gh_mirrors/po/PowerToys-CN 还在为Windows系统操作效率低下而…

作者头像 李华
网站建设 2026/7/8 9:03:12

清华风PPT模板全攻略:让你的学术汇报瞬间提升专业感

清华风PPT模板全攻略&#xff1a;让你的学术汇报瞬间提升专业感 【免费下载链接】THU-PPT-Theme 项目地址: https://gitcode.com/gh_mirrors/th/THU-PPT-Theme 还在为毕业答辩的PPT发愁吗&#xff1f;每次看到那些千篇一律的模板都提不起兴趣&#xff1f;别担心&#x…

作者头像 李华
网站建设 2026/7/18 4:38:13

10分钟搞定Axure RP中文界面:macOS终极配置指南

10分钟搞定Axure RP中文界面&#xff1a;macOS终极配置指南 【免费下载链接】axure-cn Chinese language file for Axure RP. Axure RP 简体中文语言包&#xff0c;不定期更新。支持 Axure 9、Axure 10。 项目地址: https://gitcode.com/gh_mirrors/ax/axure-cn 还在为A…

作者头像 李华
网站建设 2026/7/8 9:10:08

LabelLLM数据标注平台:AI时代的高效标注解决方案

LabelLLM数据标注平台&#xff1a;AI时代的高效标注解决方案 【免费下载链接】LabelLLM 项目地址: https://gitcode.com/gh_mirrors/la/LabelLLM 在人工智能快速发展的今天&#xff0c;数据标注已成为模型训练不可或缺的关键环节。LabelLLM作为新一代开源数据标注平台&…

作者头像 李华