类变量和实例变量是 Python 面向对象编程中两种重要的变量类型,它们有不同的作用域和生命周期。
一、基本概念对比
| | |
|---|
| 定义位置 | | __init__ |
| 存储位置 | | |
| 共享性 | | |
| 访问方式 | 类名.变量名 | 实例.变量名 |
| 内存分配 | | |
二、类变量详解
1. 基本用法
class Employee: # 类变量 company = "ABC科技有限公司" employee_count = 0 # 统计员工总数 def __init__(self, name, salary): # 实例变量 self.name = name self.salary = salary Employee.employee_count += 1 # 修改类变量# 使用emp1 = Employee("张三", 5000)emp2 = Employee("李四", 6000)print(emp1.company) # 输出: ABC科技有限公司print(emp2.company) # 输出: ABC科技有限公司print(Employee.company) # 输出: ABC科技有限公司print(Employee.employee_count) # 输出: 2
2. 类变量的共享特性
class Config: # 类变量 - 所有实例共享 debug_mode = True version = "1.0.0" def __init__(self, name): self.name = name # 实例变量# 创建实例config1 = Config("开发环境")config2 = Config("生产环境")# 修改类变量会影响所有实例Config.debug_mode = Falseprint(config1.debug_mode) # 输出: Falseprint(config2.debug_mode) # 输出: Falseprint(Config.debug_mode) # 输出: False
3. 类变量作为默认值
class BankAccount: # 类变量 - 默认值 default_interest_rate = 0.03 # 默认利率3% bank_name = "中国银行" def __init__(self, account_holder, balance=0, interest_rate=None): self.account_holder = account_holder self.balance = balance # 如果未提供利率,使用类变量默认值 self.interest_rate = interest_rate or BankAccount.default_interest_rate def calculate_interest(self): return self.balance * self.interest_rate# 使用默认利率account1 = BankAccount("张三", 10000)# 使用自定义利率account2 = BankAccount("李四", 20000, 0.05)print(f"{account1.account_holder}的利息: {account1.calculate_interest()}") # 300.0print(f"{account2.account_holder}的利息: {account2.calculate_interest()}") # 1000.0
三、实例变量详解
1. 基本用法
class Student: # 类变量 school = "第一中学" def __init__(self, name, grade): # 实例变量 - 每个学生独有 self.name = name self.grade = grade self.scores = {} # 每个学生有自己的成绩字典 def add_score(self, subject, score): self.scores[subject] = score def get_average(self): if not self.scores: return 0 return sum(self.scores.values()) / len(self.scores)# 创建实例student1 = Student("王五", 9)student2 = Student("赵六", 10)# 每个实例有独立的实例变量student1.add_score("数学", 85)student1.add_score("语文", 92)student2.add_score("数学", 78)student2.add_score("英语", 88)print(f"{student1.name}平均分: {student1.get_average()}") # 88.5print(f"{student2.name}平均分: {student2.get_average()}") # 83.0
2. 动态添加实例变量
class DynamicObject: def __init__(self, base_value): self.base_value = base_value def add_attribute(self, name, value): # 动态添加实例变量 setattr(self, name, value)# 使用obj = DynamicObject(100)obj.add_attribute("custom_attr", "动态属性")obj.another_attr = "直接添加" # 直接添加print(obj.base_value) # 输出: 100print(obj.custom_attr) # 输出: 动态属性print(obj.another_attr) # 输出: 直接添加
总结
类变量使用场景:
✅ 常量定义(如配置参数)
✅ 统计信息(如实例计数)
✅ 共享数据(如全局设置)
✅ 默认值提供
实例变量使用场景:
✅ 对象特有属性(如姓名、年龄)
✅ 对象状态(如是否激活)
✅ 对象关联数据(如订单项)
✅ 临时计算结果
关键区别:
合理使用类变量和实例变量可以让代码更加清晰和高效!