上一篇我们搞懂了类与对象的核心概念——类是抽象模板,对象是具体实例。而想要真正上手面向对象编程,第一步就是学会用class关键字定义类、创建对象,这是所有面向对象操作的基础。
今天就聚焦核心实操,用“通俗讲解+分步代码+避坑指南”,手把手教你掌握class定义类、创建对象的全流程,新手跟着敲,就能快速上手,夯实Python面向对象基础!
📌 核心前提:为什么要用class定义类?
在Python中,class是定义类的唯一关键字,它的核心作用是“封装共性”——把同一类事物的属性(特征)和方法(行为)打包在一起,形成一个规范的模板,后续创建对象时直接复用,无需重复编码。
举个简单的例子:我们要处理100个学生的信息,每个学生都有姓名、年龄、班级,都能听课、写作业。如果不用class定义类,就要给每个学生单独写代码,冗余又难维护;而用class定义一个Student类,只需写一次属性和方法,就能快速创建100个学生对象,高效又简洁。
简单说,class就是“创建模板的工具”,学会用class,才算真正迈入Python面向对象的大门。
🔧 全程实操:class定义类+创建对象(3步搞定)
class定义类、创建对象的流程非常固定,全程3步,每一步都有明确的规范和技巧,新手重点掌握语法格式和关键细节,就能少踩坑。
1. 第一步:用class定义类(核心语法)
用class定义类的基础语法非常简单,核心结构:class 类名(父类): ,后续缩进内编写属性和方法。其中父类可省略(默认继承object类,新手暂时无需关注)。
关键规范:
① 类名必须遵循“大驼峰命名法”:首字母大写,多个单词首字母均大写(如Student、Dog、Calculator),区分于小写的变量名和函数名;
② 类体必须缩进(4个空格或1个Tab),缩进内的代码都属于这个类;
③ 类中核心包含两部分:属性(描述特征)和方法(描述行为),其中__init__构造方法是必学重点,用来初始化属性。
基础示例(定义一个简单的“图书类”):
# 用class定义图书类,类名Book(大驼峰),默认继承object类class Book: # __init__构造方法:创建对象时自动执行,用于绑定属性 # self是必传参数,代表当前对象,后续参数是要绑定的属性 def __init__(self, title, author, price): # 绑定属性:self.属性名 = 参数(将传入的参数赋值给当前对象的属性) self.title = title # 书名属性 self.author = author # 作者属性 self.price = price # 价格属性 # 自定义方法:描述图书的行为(查看图书信息) def show_info(self): # 通过self.属性名,调用当前对象的属性 print(f"书名:{self.title},作者:{self.author},价格:{self.price}元")
补充说明:__init__方法是类的“初始化方法”,无需手动调用,只要创建对象,它就会自动执行,帮我们给对象绑定好属性,避免创建后重复赋值。
2. 第二步:创建对象(实例化类)
创建对象(也叫“实例化类”)的操作非常简单,只需调用类名,并传入__init__方法中要求的属性参数(无需传递self,Python会自动赋值),格式:对象名 = 类名(参数1, 参数2, ...)。
示例(基于上面的Book类,创建3个图书对象):
# 实例化第一个对象:Python入门书book1 = Book(title="Python入门到精通", author="张三", price=59.9)# 实例化第二个对象:数据分析书book2 = Book(title="Python数据分析实战", author="李四", price=79.9)# 实例化第三个对象:面向对象书book3 = Book(title="Python面向对象编程", author="王五", price=69.9)
注意:创建对象时,传入的参数数量、类型,必须和__init__方法中定义的一致(除self外),否则会报错。比如漏传price参数,就会提示“缺少位置参数”。
此时,book1、book2、book3就是3个独立的图书对象,它们都拥有Book类的所有属性(title、author、price)和方法(show_info),但属性值不同,体现了“对象的个性化”。
3. 第三步:调用对象的属性和方法
创建对象后,我们需要通过对象操作属性和方法,核心语法非常固定,记住两个格式就能搞定:
① 调用属性:对象名.属性名(获取或修改属性值);
② 调用方法:对象名.方法名()(注意加括号,触发方法执行)。
示例(操作上面创建的3个图书对象):
# 1. 调用对象的属性(获取属性值)print("第一本书信息:", book1.title, book1.author, book1.price)# 输出:第一本书信息: Python入门到精通 张三 59.9# 2. 修改对象的属性值(个性化修改)book1.price = 49.9 # 将book1的价格修改为49.9元print("修改后价格:", book1.price) # 输出:修改后价格: 49.9# 3. 调用对象的方法(触发行为)book2.show_info() # 输出:书名:Python数据分析实战,作者:李四,价格:79.9元book3.show_info() # 输出:书名:Python面向对象编程,作者:王五,价格:69.9元
小技巧:如果想一次性查看对象的所有属性,可以用print(对象名.__dict__),会以字典形式输出对象的所有属性和对应值,方便调试。
❌ 新手必避的5个class使用坑(附解决方案)
刚开始用class定义类、创建对象,新手很容易踩坑,导致代码报错,以下5个常见坑,提前避开,能节省大量调试时间,每个坑都附具体解决方案,遇到直接对照解决。
坑1:定义类时,类名用小写(比如book),不符合规范,且容易和对象名混淆。 解决方案:严格遵循大驼峰命名法,类名首字母大写,比如Book、Student,对象名用小写(比如book1、xiaoming),区分清晰。
坑2:__init__方法漏写self参数,或self参数位置不对(不是第一个参数)。 解决方案:__init__方法的第一个参数必须是self,代表当前对象,不可或缺,也不能调换位置,否则创建对象时会报错。
坑3:创建对象时,手动给self传参,导致报错“takes 1 positional argument but 2 were given”。 解决方案:self是Python自动赋值的,无需手动传递,创建对象时,只需传入__init__方法中除self外的其他参数即可。
坑4:调用方法时忘记加括号(比如book1.show_info),导致输出方法地址而非执行方法。 解决方案:调用类中的方法时,必须加括号(即使没有参数),格式:对象名.方法名(),否则只会返回方法的内存地址,不会执行方法内容。
坑5:修改属性时,直接用“类名.属性名”修改,导致所有对象的属性都被修改。 解决方案:修改属性必须通过“对象名.属性名”,针对单个对象修改;“类名.属性名”修改的是类的全局属性,会影响所有对象。
💡 实战案例:完整演示class定义类与创建对象
结合上面的知识点,我们做一个完整实战:用class定义一个“员工类”,封装员工的属性和方法,然后创建对象、调用属性和方法,新手跟着操作,就能彻底掌握整个流程。
# 1. 用class定义员工类class Employee: # 初始化属性:姓名、部门、工资 def __init__(self, name, department, salary): self.name = name # 姓名 self.department = department # 部门 self.salary = salary # 工资 # 方法1:查看员工信息 def show_employee(self): print(f"姓名:{self.name},部门:{self.department},工资:{self.salary}元") # 方法2:调整工资 def adjust_salary(self, new_salary): self.salary = new_salary print(f"{self.name}的工资已调整为:{self.salary}元")# 2. 创建2个员工对象emp1 = Employee(name="张三", department="技术部", salary=8000)emp2 = Employee(name="李四", department="市场部", salary=7000)# 3. 调用对象的属性和方法# 查看员工信息emp1.show_employee() # 输出:姓名:张三,部门:技术部,工资:8000元emp2.show_employee() # 输出:姓名:李四,部门:市场部,工资:7000元# 调整员工工资emp1.adjust_salary(9000) # 输出:张三的工资已调整为:9000元print("张三调整后工资:", emp1.salary) # 输出:张三调整后工资: 9000
运行代码后,就能看到员工对象的属性查看、工资调整功能正常执行,整个代码逻辑清晰、可复用——如果后续再添加员工,只需一行代码创建对象,无需重复编写属性和方法,这就是class定义类的核心价值。
📝 核心总结
用class定义类、创建对象,是Python面向对象编程的基础,核心要点总结:
1. 定义类:用class关键字,遵循大驼峰命名法,类体包含__init__构造方法(绑定属性)和自定义方法(描述行为);
2. 创建对象:调用类名,传入__init__方法要求的参数(无需传self),格式:对象名 = 类名(参数);
3. 操作对象:调用属性用“对象名.属性名”,调用方法用“对象名.方法名()”;
4. 避坑关键:记住self的作用、类名规范、方法调用加括号,避免全局修改对象属性。
对于新手来说,不用急于追求复杂的类设计,先熟练掌握“class定义类→创建对象→操作属性和方法”这3个核心步骤,多敲几个案例(比如计算器类、动物类),就能夯实基础,为后续学习继承、封装、多态打下基础。
✨ 小任务:用class定义一个“手机类”,包含品牌、型号、价格3个属性,以及“查看手机信息”“修改手机价格”2个方法,创建2个手机对象并测试功能。
读懂代码的骨架,驾驭AI的血肉,做数字时代的超级个体🔥