上一节我们聊了面向对象的基本概念——类是图纸,实例是房子,实例化是施工。但图纸到底怎么画?这节就上手写代码,真正定义一个类。
结果刚写第一行,很多人就懵了:定义函数用 def,定义类用什么?类名怎么起?类里面写函数还是叫函数吗?还有个奇怪的 __init__ 方法,名字带两坨下划线,还不用你自己喊它就跑了——这都什么跟什么?
别急,一个一个来。
定义函数的时候,你写 def 开头。定义类呢?换关键字,写 class。
这就好比——进厨房做饭,你得先知道用炒锅还是蒸锅。def 是炒函数那口锅,class 是炖类那口锅,锅不一样,但都是进厨房干活。
基本语法长这样:
class Person:
# 类里面的内容写在这里,别忘了缩进
pass
拆开看:
跟定义函数一个套路:def + 函数名 + 冒号 + 回车 + 缩进写内容。类就是 class + 类名 + 冒号 + 回车 + 缩进写内容。只是关键字换了,套路一模一样。
你看上面的类名叫 Person,首字母 P 是大写的。这不是随便写的,是有规矩的。
Python 里类名通常使用大驼峰命名法。啥叫大驼峰?每个单词的首字母都大写,像骆驼的驼峰一样一高一高。
命名法 | 样子 | 用在哪 |
大驼峰 | MyPerson、StudentInfo | 类名 |
小驼峰 | myPerson、studentInfo | Java/JS 常用,Python 少用 |
下划线 | my_person、student_info | 变量名、函数名 |
所以你看到 Person、StudentInfo、MyFirstClass 这种每个单词首字母都大写的名字,基本可以断定——这是个类名。
注意:类名首字母大写是约定俗成,不是语法强制。你写 person 也不会报错,但别人一看就知道你是新手。就像穿拖鞋去面试,没人拦你,但印象分没了。

这是第一个让新手愣住的概念:你在类里面写一个 def,它就不叫"函数"了,改叫方法。
不是开玩笑,是真的改姓了。
位置 | 叫什么 | 例子 |
类的外面 | 函数(Function) | def eat(): 写在类外面 → 函数 |
类的里面 | 方法(Method) | def eat(self): 写在类里面 → 方法 |
为啥要换名字?因为同一个东西,放在不同的位置,身份就变了。就像同一个人,在公司叫"员工",回到家叫"爸爸",人还是那个人,但身份不同了。
一句话记住:定义在类中的函数 = 方法。从今天起,在类里面写 def,请叫它"方法",别再叫"函数"了。
写类不能瞎写,得有个规矩。通常情况下,类里面第一个写的方法叫 __init__。
先看看它长什么样:
class Person:
def __init__(self):
# 初始化代码写这里
pass
这个方法名字很特殊——左右各两个下划线,中间夹着 init。看起来像被下划线"保护"起来了。
__init__ 的中文名字叫初始化方法。"init" 就是 initialize(初始化)的缩写。
它的主要作用只有一个:给当前正在创建的实例对象添加属性。
说人话——你开了一家造人工厂(类),每造一个人(实例),都得给他登记姓名、年龄、性别。__init__ 就是那个登记表,每来一个新人,自动填表。
class Person:
def __init__(self, name, age, gender):
self.name = name # 给实例添加姓名属性
self.age = age # 给实例添加年龄属性
self.gender = gender # 给实例添加性别属性
信息量有点大,拆开看。
__init__ 方法接收的参数分两类:
参数类型 | 位置 | 代表什么 |
self | 第一个参数 | 当前正在创建的实例对象 |
自定义参数 | self 后面 | name、age、gender 等,你说了算 |
self 是最让新手困惑的参数。它到底是什么?
用"造人工厂"来理解:
self 不是固定的某个人,是"当前正在被制造的那个人"。谁在被造,self 就是谁。
self 的本质:当前正在创建的实例对象。你不用管它是谁,Python 会自动帮你把正在创建的对象塞进去。你只需要在第一个参数位置写上 self,占好座位就行。
知道了 self 是谁,接下来看 __init__ 里面干了什么:
def __init__(self, name, age, gender):
self.name = name # self.name 是属性名,name 是参数名
self.age = age # self.age 是属性名,age 是参数名
self.gender = gender # self.gender 是属性名,gender 是参数名
这三行代码干的事都一样——给实例对象添加属性。
语法是:self.属性名 = 值
拿 self.name = name 这行来拆:
部分 | 是什么 | 解释 |
self | 实例对象 | 当前正在创建的那个人 |
.name | 属性名 | 给这个人贴的标签叫"name" |
= | 赋值 | 把右边的值塞进去 |
name | 参数值 | 从外面传进来的名字 |
最大的易混点:self.name 和 name 是两个不同的东西!self.name — 属性名,是实例对象上的一个标签。name — 参数名,是外面传进来的值。它俩可以同名(都叫 name),也可以不同名(比如 self.n = name)。但通常写成同名,方便理解——属性叫 name,值也叫 name,一一对应。再打个比方:你去办入职,HR 让你填表。
这是第二个让新手愣住的地方:__init__ 方法不需要你自己调用。
回忆一下普通函数怎么用——定义完得自己喊一声:
def eat():
print("吃饭")
eat() # 得自己喊,不然它不动
但 __init__ 不一样。当你创建实例对象的时候,Python 会自动调用它,不用你操心。
# 创建实例(下一节才细讲,先看一眼)
p1 = Person("张三", "20", "男")
# Python 在背后自动干了这件事:
# Person.__init__(p1, "张三", "20", "男")
# 你没写这行,但 Python 帮你喊了
为什么不用自己喊?因为 __init__ 是 Python 内置的特殊方法(双下划线开头结尾的方法都是特殊的)。Python 对这些方法有特殊待遇——在特定时机自动触发。__init__ 的触发时机就是"创建实例对象的那一刻"。
既然 __init__ 是 Python 内置的特殊方法名,那你能改成 __start__ 或 __begin__ 吗?
不能。
因为 Python 在创建实例时,是按名字找 __init__ 的。你改了名字,Python 就找不到这个方法了,不会自动调用它。
名字 | Python 认不认 | 自动调用 |
__init__ | 认 | 会自动调用 |
__start__ | 不认 | 不会调用 |
init | 不认 | 不会调用 |
my_init | 不认 | 不会调用 |
规矩:__init__ 这个名字是 Python 规定的,左右各两个下划线,一个都不能少,拼写也不能改。你就当它是固定搭配,照着写就行。
把上面所有知识点串起来,一个完整的类定义长这样:
# 定义一个 Person 类
class Person:
# 初始化方法:给实例添加属性
def __init__(self, name, age, gender):
self.name = name # 姓名
self.age = age # 年龄
self.gender = gender # 性别
逐行拆解:
行号 | 代码 | 干的事 |
1 | class Person: | 用 class 关键字定义类,类名 Person(大驼峰,首字母大写) |
2 | def __init__(self, name, age, gender): | 定义初始化方法,self 是当前实例,后面三个是自定义参数 |
3 | self.name = name | 给实例添加 name 属性,值来自参数 name |
4 | self.age = age | 给实例添加 age 属性,值来自参数 age |
5 | self.gender = gender | 给实例添加 gender 属性,值来自参数 gender |
1. class 关键字定义类,类名用大驼峰
class Person:,不是 def Person:,首字母大写是约定。
2. 类里的函数叫方法,第一个写 __init__
函数进了类就改叫方法。__init__ 是初始化方法,名字固定不能改,左右各两个下划线。
3. self 是当前实例,__init__ 自动调用
self 代表正在创建的对象,造谁它就是谁。__init__ 不用你喊,创建实例时 Python 自动调用。
定义类的套路就五步:
步骤 | 写什么 | 注意 |
1. 关键字 | class | 不是 def |
2. 类名 | Person | 大驼峰,首字母大写 |
3. 冒号+缩进 | : + 回车 | 跟 if/def 一样 |
4. 写 __init__ | def __init__(self, ...): | 名字不能改,self 必须有 |
5. 添加属性 | self.属性 = 参数 | self.属性名 和 参数名 是两回事 |
这节只讲了怎么定义类,还没讲怎么创建实例。就像你学会了怎么画图纸,但还没开始施工。下一节就是施工——用图纸盖房子,用类创建对象。
先把定义类这步吃透,下节上手就顺了。
更新时间:2026-07-25
本站资料均由网友自行发布提供,仅用于学习交流。如有版权问题,请与我联系,QQ:4156828
© CopyRight All Rights Reserved.
Powered By 71396.com 闽ICP备11008920号
闽公网安备35020302034903号