Python 类
- 类的基本结构
- 核心概念与示例
- 定义类并创建实例
- 实例方法、类方法、静态方法
- 继承(代码复用)
- 封装(隐藏内部细节)
- 关键点总结
Python
类是面向对象编程(
OOP
)的核心,用于封装数据和操作数据的方法。下面通过实例逐步讲解类的基本使用:
类的基本结构
类由属性(数据)
和方法(函数)
组成,基本格式:
class 类名:# 类属性(所有实例共享)类变量 = 值 # None 不是 null# 构造方法(初始化实例)def __init__(self, 参数1, 参数2, ...):# 实例属性(每个实例独立)self.属性1 = 参数1self.属性2 = 参数2# 实例方法(必须包含self参数)def 方法名(self, 参数...):# 方法体(可通过self访问属性/其他方法)pass
核心概念与示例
定义类并创建实例
class Person:# 类属性(所有Person实例共享)species = "人类"# 构造方法:创建实例时自动调用def __init__(self, name, age):# 实例属性:每个实例独立拥有self.name = name # 姓名self.age = age # 年龄# 实例方法:打印个人信息def introduce(self):print(f"我叫{self.name},今年{self.age}岁,是{self.species}")# 创建实例(对象)
p1 = Person("张三", 20)
p2 = Person("李四", 30)# 访问属性
print(p1.name) # 输出:张三
print(p2.age) # 输出:30
print(Person.species) # 输出:人类(访问类属性)# 调用方法
p1.introduce() # 输出:我叫张三,今年20岁,是人类
p2.introduce() # 输出:我叫李四,今年30岁,是人类
实例方法、类方法、静态方法
- 实例方法:操作实例属性,第一个参数必须是
self
- 类方法:操作类属性,用
@classmethod
装饰,第一个参数是cls
(代表类本身) - 静态方法:与类和实例无关,用
@staticmethod
装饰,无默认参数
class Calculator:# 类属性:记录计算次数count = 0def __init__(self, x, y):self.x = xself.y = y# 实例方法:计算两个数的和def add(self):return self.x + self.y# 类方法:更新计算次数@classmethoddef increment_count(cls):cls.count += 1# 静态方法:判断一个数是否为偶数(与类/实例无关)@staticmethoddef is_even(num):return num % 2 == 0# 使用示例
calc = Calculator(3, 5)
print(calc.add()) # 输出:8(实例方法)Calculator.increment_count()
print(Calculator.count) # 输出:1(类方法)print(Calculator.is_even(4)) # 输出:True(静态方法)
继承(代码复用)
子类可以继承父类的属性和方法,并可添加新内容或重写父类方法。
# 父类:动物
class Animal:def __init__(self, name):self.name = namedef speak(self):print("动物发出声音")# 子类:狗(继承Animal)
class Dog(Animal):# 重写父类方法def speak(self):print(f"{self.name}汪汪叫")# 新增方法def run(self):print(f"{self.name}在跑")# 子类:猫(继承Animal)
class Cat(Animal):def speak(self):print(f"{self.name}喵喵叫")# 使用
dog = Dog("旺财")
dog.speak() # 输出:旺财汪汪叫
dog.run() # 输出:旺财在跑cat = Cat("咪咪")
cat.speak() # 输出:咪咪喵喵叫
封装(隐藏内部细节)
通过命名约定(下划线)隐藏属性,只暴露必要的方法。
class BankAccount:def __init__(self, balance=0):self._balance = balance # 单下划线:约定为"私有"属性(外部尽量不直接访问)# 提供方法操作属性(封装)def deposit(self, amount):if amount > 0:self._balance += amountprint(f"存入{amount}元,余额:{self._balance}")def withdraw(self, amount):if 0 < amount <= self._balance:self._balance -= amountprint(f"取出{amount}元,余额:{self._balance}")else:print("取款失败")# 使用
account = BankAccount(1000)
account.deposit(500) # 存入500元,余额:1500
account.withdraw(300) # 取出300元,余额:1200
关键点总结
self
代表实例本身,必须作为实例方法的第一个参数
类属性是所有实例共享的,实例属性是每个实例独有的
继承用于代码复用,子类可重写父类方法
封装通过方法操作属性,隐藏内部实现细节