Thông báo: Download 4 khóa học Python từ cơ bản đến nâng cao tại đây.
Tìm hiểu về Class Attributes trong Python
Trong bài viết này, bạn sẽ tìm hiểu về thuộc tính lớp (class attributes) trong Python, một khái niệm quan trọng giúp quản lý dữ liệu chung giữa các đối tượng của một lớp. Mình sẽ tìm hiểu cách định nghĩa class attributes, cách truy cập chúng, và khi nào nên sử dụng class attributes để viết mã một cách hiệu quả và có tổ chức hơn.

Giới thiệu về class attributes trong Python
Hãy bắt đầu với một ví dụ về lớp Circle (hình tròn):
class Circle:
def __init__(self, radius):
self.pi = 3.14159
self.radius = radius
def area(self):
return self.pi * self.radius**2
def circumference(self):
return 2*self.pi * self.radius
Lớp Circle có hai thuộc tính là pi và radius. Nó cũng có hai phương thức để tính diện tích và chu vi của hình tròn.
Cả pi và radius đều được gọi là thuộc tính thể hiện (instance attributes), nghĩa là chúng thuộc về một thể hiện cụ thể của lớp Circle. Nếu bạn thay đổi thuộc tính của một thể hiện, nó sẽ không ảnh hưởng đến các thể hiện khác.
Bài viết này được đăng tại [free tuts .net]
Ngoài các thuộc tính thể hiện, Python cũng hỗ trợ thuộc tính lớp (class attributes). Class attributeskhông liên kết với bất kỳ thể hiện cụ thể nào của lớp mà được chia sẻ bởi tất cả các thể hiện.
Nếu bạn đã lập trình với Java hoặc C#, bạn sẽ thấy rằng class attributes tương tự như thành viên tĩnh (static members), nhưng không hoàn toàn giống nhau.
Cách định nghĩa class attributes trong Python
Để định nghĩa một class attributes t, bạn đặt nó bên ngoài phương thức __init__(). Ví dụ:
class Circle:
pi = 3.14159
def __init__(self, radius):
self.radius = radius
def area(self):
return self.pi * self.radius**2
def circumference(self):
return 2 * self.pi * self.radius
Sau đó, bạn có thể truy cập class attributes thông qua các thể hiện của lớp hoặc qua tên lớp:
c = Circle(10) print(c.pi) # Truy cập thông qua thể hiện print(Circle.pi) # Truy cập trực tiếp qua lớp
Kết quả:
3.14159 3.14159
Cách hoạt động của class attributes trong Python
Khi bạn truy cập một thuộc tính thông qua một thể hiện của lớp, Python sẽ tìm kiếm thuộc tính đó trong danh sách thuộc tính thể hiện. Nếu không tìm thấy, Python tiếp tục tìm trong danh sách class attributes và trả về giá trị của thuộc tính nếu nó có mặt ở một trong hai danh sách.
Ví dụ sau định nghĩa một lớp Test để minh họa cách Python xử lý thuộc tính thể hiện và class attributes:
class Test:
x = 10 # class attributes
def __init__(self):
self.x = 20 # Thuộc tính thể hiện
test = Test()
print(test.x) # 20 - thuộc tính thể hiện
print(Test.x) # 10 - class attributes
Trong ví dụ này, thuộc tính x tồn tại dưới dạng thuộc tính thể hiện và class attributes. Khi truy cập qua thể hiện test, kết quả là 20 từ thuộc tính thể hiện, nhưng khi truy cập qua lớp Test, kết quả là 10 từ class attributes
Khi nào nên sử dụng class attributes trong Python?
Lưu trữ hằng số của lớp
Khi một giá trị không thay đổi giữa các thể hiện của lớp, như hằng số, bạn nên lưu trữ nó dưới dạng class attributes. Ví dụ, hằng số pi trong lớp Circle là ứng viên tốt cho class attributes vì nó không thay đổi.
Theo dõi dữ liệu giữa các thể hiện
Bạn có thể sử dụng class attributes để theo dõi thông tin chung cho tất cả các thể hiện của lớp. Ví dụ:
class Circle:
circle_list = []
pi = 3.14159
def __init__(self, radius):
self.radius = radius
self.circle_list.append(self)
c1 = Circle(10)
c2 = Circle(20)
print(len(Circle.circle_list)) # Kết quả: 2
Định nghĩa giá trị mặc định
Đôi khi bạn muốn đặt một giá trị mặc định cho tất cả các thể hiện của lớp. Ví dụ:
class Product:
default_discount = 0
def __init__(self, price):
self.price = price
self.discount = Product.default_discount
def set_discount(self, discount):
self.discount = discount
def net_price(self):
return self.price * (1 - self.discount)
p1 = Product(100)
print(p1.net_price()) # 100
p2 = Product(200)
p2.set_discount(0.05)
print(p2.net_price()) # 190
Kết bài
Như vậy, class attributes trong Python là công cụ hữu ích để chia sẻ dữ liệu và quản lý các giá trị chung giữa các thể hiện của một lớp. Bằng cách đặt thuộc tính bên ngoài phương thức __init__(), chúng ta có thể dễ dàng truy cập và sử dụng nó thông qua cả tên lớp và thể hiện. Việc sử dụng class attributes không chỉ giúp mã nguồn rõ ràng, dễ bảo trì hơn, mà còn tối ưu hóa việc quản lý hằng số, dữ liệu và giá trị mặc định một cách hiệu quả.

Các kiểu dữ liệu trong C ( int - float - double - char ...)
Thuật toán tìm ước chung lớn nhất trong C/C++
Cấu trúc lệnh switch case trong C++ (có bài tập thực hành)
ComboBox - ListBox trong lập trình C# winforms
Random trong Python: Tạo số random ngẫu nhiên
Lệnh cin và cout trong C++
Cách khai báo biến trong PHP, các loại biến thường gặp
Download và cài đặt Vertrigo Server
Thẻ li trong HTML
Thẻ article trong HTML5
Cấu trúc HTML5: Cách tạo template HTML5 đầu tiên
Cách dùng thẻ img trong HTML và các thuộc tính của img
Thẻ a trong HTML và các thuộc tính của thẻ a thường dùng