Biến của instance và biến của lớp
Thuộc phần Lập trình hướng đối tượng trong hành trình Python của Coddy. Bài học 13 trên 64.
Biến thực thể (instance variable) là duy nhất với mỗi đối tượng, còn biến lớp (class variable) được mọi đối tượng thuộc cùng một lớp chia sẻ.
Đây là ví dụ về một lớp có cả hai loại biến
class Student:
# Biến lớp (class variable): dùng chung cho mọi instance
school = "Python High School"
def __init__(self, name, grade):
# Biến instance: riêng của từng học sinh
self.name = name
self.grade = gradeTạo các đối tượng học sinh:
alice = Student("Alice", "A")
bob = Student("Bob", "B")Truy cập các biến instance (riêng biệt với từng đối tượng):
print(alice.name) # Alice
print(bob.name) # Bob
print(alice.grade) # A
print(bob.grade) # BTruy cập các biến lớp (được chia sẻ bởi tất cả đối tượng):
print(alice.school) # Python High School
print(bob.school) # Python High School
print(Student.school) # Python High SchoolBây giờ hãy thay đổi biến lớp:
Student.school = "Python Academy"Kiểm tra xem thay đổi ảnh hưởng thế nào đến tất cả các đối tượng:
print(alice.school) # Python Academy
print(bob.school) # Python AcademyĐầu ra:
Alice
Bob
A
B
Python High School
Python High School
Python High School
Python Academy
Python AcademyBạn cũng có thể tạo biến thực thể (instance variable) sau khi tạo đối tượng:
alice.age = 16 # Lệnh này tạo một biến (variable) của instance
print(alice.age) # 16
# print(bob.age) # Lệnh này sẽ gây lỗi vì bob không có thuộc tính ageKhác biệt chính: Biến thực thể (instance variable), được tạo bằng self.variable_name, là riêng cho từng đối tượng, còn biến lớp (class variable), được định nghĩa trực tiếp trong lớp, thì được mọi đối tượng dùng chung. Thay đổi biến lớp sẽ ảnh hưởng đến mọi instance.
Thử thách
DễHoàn thành hệ thống ngân hàng. Bạn sẽ định nghĩa một lớp BankAccount trong một tệp và sử dụng lớp đó trong một tệp khác.
Bạn sẽ làm việc với:
bank_account.py: Định nghĩa lớpBankAccountvới các thuộc tính và phương thứcdriver.py: Nhập lớp, tạo các tài khoản và minh họa biến lớp
Làm theo các chú thích TODO trong cả hai tệp để thực hiện từng bước. Các chú thích sẽ hướng dẫn bạn tạo lớp với các biến và phương thức phù hợp, đồng thời cho thấy biến lớp ảnh hưởng đến tất cả các đối tượng như thế nào.
Tự làm thử
# TODO: Nhập lớp (class) BankAccount từ bank_account.py
from bank_account import BankAccount
# TODO: Tạo hai tài khoản với thông tin chính xác sau:
# - account1: chủ tài khoản "Alice Smith", số dư $1000
# - account2: chủ tài khoản "Bob Jones", số dư $2000
# TODO: Gọi display_info() cho cả hai tài khoản
# TODO: Đổi biến (variable) lớp interest_rate thành 0.03 (3%)
# Dùng định dạng này: BankAccount.interest_rate = 0.03
# TODO: In ra chuỗi (string) "After interest rate change:"
# TODO: Gọi lại display_info() cho cả hai tài khoản để cho thấy cả hai đều có lãi suất mớiBài học này có một bài trắc nghiệm ngắn. Bắt đầu bài học để trả lời và theo dõi tiến độ.
Tất cả bài học trong Lập trình hướng đối tượng
1Nền tảng về lập trình hướng đối tượng
Tệp bên ngoàiGiới thiệu về lập trình hướng đối tượngLớp và đối tượngTham số selfPhương thứcThuộc tínhPhương thức khởi tạo (__init__)Ôn tập: máy tính đơn giản4Kế thừa
Kế thừa cơ bảnHàm super()Ghi đè phương thứcKế thừa đa lớpThứ tự phân giải phương thứcÔn tập: hệ thống phân cấp nhân viên2Decorator
Giới thiệu về decoratorDecorator thuộc tínhDecorator phương thức tĩnhDecorator phương thức lớp5Tính đa hình
Xem lại cách ghi đè phương thứcKiểu gõ vịtLớp và phương thức trừu tượngThiết kế giao diệnÔn tập: máy tính hình học8Các khái niệm OOP nâng cao
Kết hợp và kế thừaMixinPhương thức tĩnh và phương thức lớpDecorator lớpTrình quản lý ngữ cảnh3Thuộc tính của lớp
Biến của instance và biến của lớpDecorator thuộc tínhThuộc tính riêng tưÔn tập: trình quản lý tài khoản ngân hàngTự luyện tập: Trình biên dịch Python online