Menu
CoddyTech

实例变量与类变量

本课属于 Coddy Python 学习旅程的“面向对象编程”单元。第 13 课,共 64 课。

实例变量对每个对象来说都是独有的,而类变量由同一个类的所有对象共享。

下面是一个包含这两种变量的类示例

class Student:
    # 类变量,所有实例共享
    school = "Python High School"
    
    def __init__(self, name, grade):
        # 实例变量,每个学生各自独有
        self.name = name
        self.grade = grade

创建学生对象:

alice = Student("Alice", "A")
bob = Student("Bob", "B")

访问实例变量(每个对象独有):

print(alice.name)  # Alice
print(bob.name)    # Bob
print(alice.grade) # A
print(bob.grade)   # B

访问类变量(由所有对象共享):

print(alice.school)     # Python 高中
print(bob.school)       # Python 高中
print(Student.school)   # Python 高中

现在修改类变量:

Student.school = "Python Academy"

检查这项更改对所有实例的影响:

print(alice.school)   # Python Academy
print(bob.school)     # Python Academy

输出:

Alice
Bob
A
B
Python High School
Python High School
Python High School
Python Academy
Python Academy

你也可以在创建对象后创建实例变量:

alice.age = 16  # 这会创建一个实例变量
print(alice.age)  # 16
# print(bob.age)  # 这会导致错误,因为 bob 没有 age 属性

关键区别:实例变量(使用 self.variable_name 创建)是每个对象独有的,而类变量(直接在类中定义)由所有对象共享。更改类变量会影响所有实例。

challenge icon

挑战

简单

完成一个银行系统。你将在一个文件中定义 BankAccount 类,并在另一个文件中使用它。

你将使用:

  • bank_account.py:定义带有属性和方法的 BankAccount 类
  • driver.py:导入这个类、创建账户,并演示类变量

按照两个文件中的 TODO 注释逐步操作。这些注释会指导你创建包含合适变量和方法的类,并展示类变量如何影响所有实例。

亲手试试

# TODO: 从 bank_account.py 导入 BankAccount 类
from bank_account import BankAccount

# TODO: 按以下详细信息创建两个账户:
# account1:账户持有人为 "Alice Smith",余额为 $1000
# account2:账户持有人为 "Bob Jones",余额为 $2000

# TODO: 对两个账户分别调用 display_info()

# TODO: 将类变量 interest_rate 改为 0.03(3%)
# 使用以下格式:BankAccount.interest_rate = 0.03

# TODO: 打印文本 "After interest rate change:"

# TODO: 再次对两个账户分别调用 display_info(),显示它们都使用了新的利率
quiz icon自我测试

这节课包含一个小测验。开始学习即可作答,并记录你的进度。

面向对象编程中的所有课

自己练习: Python 在线编译器