Python 类(Class)零基础入门指南
类就是把数据和功能打包在一起的“代码图纸”,而对象就是根据图纸造出来的具体“产品”。
一、什么是类?什么是对象?
类(Class) 是创建对象的模板或蓝图,而对象(Object) 是根据类创建出来的具体实例。
用生活中的例子来理解:
| 概念 | 生活中的类比 | 代码中的例子 |
|---|---|---|
| 类 | 手机的设计图纸 | class Student: |
| 对象 | 根据图纸造出的具体手机 | s1 = Student() |
类定义了“有什么”和“能做什么”,而对象是实实在在存在的个体。
二、定义一个最简单的类
python
# 定义类(图纸)
class Student:
pass # pass 表示空类,什么都不做
# 创建对象(根据图纸造实例)
s1 = Student()
s2 = Student()
print(s1) # <__main__.Student object at 0x...>
print(s2) # <__main__.Student object at 0x...>(不同地址)
💡 要点:
s1和s2是两个不同的对象,互不影响,就像两台不同手机一样。
三、__init__ 构造方法:给对象初始化数据
__init__ 是类中一个特殊的方法,在创建对象时自动调用,用来给对象设置初始属性。
python
class Student:
# 构造方法:创建对象时自动执行
def __init__(self, name, age):
self.name = name # 属性:姓名
self.age = age # 属性:年龄
# 创建对象时,自动调用 __init__
s1 = Student("张三", 18)
s2 = Student("李四", 20)
print(s1.name) # 张三
print(s2.age) # 20
self 是什么?
self 代表当前正在创建的对象自己,在方法定义中必须写在第一个参数位置,调用时不需要传值,Python 会自动处理。
💡 要点:创建对象时,
__init__里的self就是新创建的那个对象。
四、在类里添加方法(对象的行为)
类里的函数叫方法,描述对象能做什么事情。
python
class Student:
def __init__(self, name, age):
self.name = name
self.age = age
# 方法1:介绍自己
def introduce(self):
print(f"我叫{self.name},今年{self.age}岁")
# 方法2:学习
def study(self, subject):
print(f"{self.name}正在学习{subject}")
# 使用
s = Student("小明", 14)
s.introduce() # 我叫小明,今年14岁
s.study("数学") # 小明正在学习数学
💡 要点:每个方法的第一个参数都是
self,代表调用该方法的对象本身。
五、修改、访问对象属性
python
class Student:
def __init__(self, name):
self.name = name
s = Student("张三")
# 1. 访问属性
print(s.name) # 张三
# 2. 修改属性
s.name = "李四"
print(s.name) # 李四
# 3. 动态添加新属性(Python 非常灵活)
s.score = 90
print(s.score) # 90
# 4. 判断是否有某个属性
print(hasattr(s, "name")) # True
print(hasattr(s, "age")) # False
💡 要点:与 Java 等静态语言不同,Python 允许随时给对象添加新属性。
六、数据封装:把逻辑藏进类里
面向对象的一个重要特点是封装:把数据和操作数据的方法打包在一起,外部不需要知道内部细节。
python
class Student:
def __init__(self, name, score):
self.name = name
self.score = score
# 封装在类内部的判断逻辑
def get_grade(self):
if self.score >= 90:
return "A"
elif self.score >= 60:
return "B"
else:
return "C"
# 使用:只需要调用方法,不需要知道内部怎么判断的
s = Student("小明", 85)
print(s.get_grade()) # B
💡 要点:封装让代码使用更简单,修改内部逻辑也不会影响外部调用代码。
七、继承:复用父类代码
继承就是子类可以继承父类的属性和方法,避免重复编写相同代码。
python
# 父类
class Person:
def __init__(self, name, age):
self.name = name
self.age = age
def say(self):
print(f"我是{self.name}")
# 子类 Student 继承 Person
class Student(Person):
def __init__(self, name, age, student_id):
# 调用父类构造方法,复用父类代码
super().__init__(name, age)
self.student_id = student_id # 子类自己的属性
def study(self):
print(f"{self.name}正在学习")
# 使用
s = Student("小明", 15, "S1001")
s.say() # 我是小明(继承自父类)
s.study() # 小明正在学习(子类自己的)
💡 要点:
super().__init__()用来调用父类的构造方法,实现代码复用。
八、多态:同一方法不同表现
多态是指同一个方法名,在不同子类中可以有不同实现。
python
class Animal:
def speak(self):
pass
class Dog(Animal):
def speak(self):
print("汪汪汪")
class Cat(Animal):
def speak(self):
print("喵喵喵")
# 同一个方法,不同对象表现不同
def make_sound(animal):
animal.speak()
make_sound(Dog()) # 汪汪汪
make_sound(Cat()) # 喵喵喵
九、常用特殊方法(魔术方法)
以 __xx__ 命名的特殊方法,Python 会在特定场景自动调用。
__str__:打印对象时触发
python
class Student:
def __init__(self, name):
self.name = name
def __str__(self):
return f"学生:{self.name}"
s = Student("小明")
print(s) # 学生:小明(不再打印地址)
__len__:让对象支持 len()
python
class Classroom:
def __init__(self):
self.students = []
def add(self, name):
self.students.append(name)
def __len__(self):
return len(self.students)
c = Classroom()
c.add("小明")
c.add("小红")
print(len(c)) # 2
十、快速参考卡片
python
# ===== 定义类 =====
class ClassName:
# 构造方法
def __init__(self, 参数):
self.属性 = 参数
# 普通方法
def 方法名(self):
return self.属性
# ===== 创建对象 =====
obj = ClassName(参数)
# ===== 继承 =====
class 子类(父类):
def __init__(self, 参数):
super().__init__(参数) # 调用父类
# ===== 常用魔术方法 =====
__init__ # 创建对象时调用
__str__ # print(对象) 时调用
__len__ # len(对象) 时调用
💡 一句话总结
类就是数据+功能的打包模板,对象就是根据模板造出来的具体东西。
402



被折叠的 条评论
为什么被折叠?



