上一节我们聊了面向对象的基本概念——类是图纸,实例是房子,实例化是施工。但图纸到底怎么画?这节就上手写代码,真正定义一个类。结果刚写第一行,很多人就懵...
2026-07-25 6
上一节我们聊了面向对象的基本概念——类是图纸,实例是房子,实例化是施工。但图纸到底怎么画?这节就上手写代码,真正定义一个类。
结果刚写第一行,很多人就懵了:定义函数用 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 6
【CNMO科技消息】7月24日,据钱江视频报道,记者实地走访百脑汇多家数码店铺发现,显卡正迎来新一轮普涨。RTX 5080百脑汇一位卖了七年显卡的老板...
2026-07-25 8
【CNMO科技消息】近日,一款型号为PYC110的OPPO手机出现在Geekbench跑分平台,有消息称该机或为尚未发布的OPPO A7 Pro Ma...
2026-07-25 11
来源:市场资讯(来源:快科技)快科技7月24日消息,据报道,微软已要求LG在其显示器应用中禁用McAfee试用广告弹窗。此前有用户发现,其新LG Ul...
2026-07-25 13
7 月 24 日消息,荷兰科技媒体 Galaxy Club 昨日(7 月 23 日 发布博文,爆料称三星 Galaxy S27 和 Galaxy 27...
2026-07-25 13
昨晚刷小黑盒,划到一条爆料帖直接给我看清醒了。一位不明身份的盒友晒出了一张显示器对比实拍图,左边看样子是三星的G81SF,右边仅从外观来看大概率是TC...
2026-07-25 17
8月13日,据媒体报道,阿里巴巴集团前合伙人蔡景现已离职,其阿里内外平台状态显示为“退隐江湖”。有接近阿里的人士向记者确认了这一消息。 蔡景现花名...
2026-07-24 21
本文原创,禁止搬运和抄袭,违者必究!导语:往年的数码圈,旗舰手机发布会就像一场有序的接力赛,各品牌错峰登场,各自闪耀。可2026年,这一切都变了!今年...
2026-07-24 22
发表评论