当前位置:首页>python>Python学习--类变量和实例变量

Python学习--类变量和实例变量

  • 2026-09-07 10:23:10
Python学习--类变量和实例变量

类变量和实例变量是 Python 面向对象编程中两种重要的变量类型,它们有不同的作用域和生命周期。

一、基本概念对比

  特性
  类变量
(Class Variable)
  实例变量
(Instance Variable)
 定义位置
类内部,方法外部
__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("李四"200000.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)    # 输出: 直接添加

总结

类变量使用场景

  • ✅ 常量定义(如配置参数)

  • ✅ 统计信息(如实例计数)

  • ✅ 共享数据(如全局设置)

  • ✅ 默认值提供

实例变量使用场景

  • ✅ 对象特有属性(如姓名、年龄)

  • ✅ 对象状态(如是否激活)

  • ✅ 对象关联数据(如订单项)

  • ✅ 临时计算结果

关键区别

  • 类变量属于类,实例变量属于实例

  • 修改类变量影响所有实例,修改实例变量只影响当前实例

  • 类变量节省内存,实例变量提供独立性

合理使用类变量和实例变量可以让代码更加清晰和高效!

请在微信客户端打开

最新文章

随机文章