Class attributes là những thuộc tính chung của một lớp, có thể được truy cập và chia sẻ giữa tất cả các instance (đối tượng) của lớp đó. Khác với instance attributes chỉ thuộc về từng đối tượng riêng lẻ, class attributes giúp quản lý dữ liệu dùng chung một cách hiệu quả. Trong bài viết này, mình sẽ hướng dẫn bạn cách khai báo, truy cập và thay đổi class attributes. Đồng thời, bạn cũng sẽ hiểu rõ sự khác biệt giữa class attributes và instance attributes, cũng như những ứng dụng quan trọng của chúng trong lập trình Python.
Điểm chính cần nắm
- Class Attributes trong Python là gì?: Là các thuộc tính chung của lớp, được chia sẻ giữa tất cả các instance.
- Cách truy cập class attributes trong Python: Dùng tên lớp (
ClassName.attribute_name
) hoặc thông qua một instance (instance.attribute_name
). - Thay đổi Class Attributes trong Python: Có thể thay đổi từ lớp, nhưng nếu thay đổi từ instance, Python sẽ tạo một instance attribute mới.
- Vai trò của Class Attributes: Lưu trữ dữ liệu chung cho tất cả các instance, giúp tiết kiệm bộ nhớ và đảm bảo tính nhất quán.
- Các Class Attributes có sẵn trong Python: Bao gồm
__dict__
,__doc__
,__name__
,__module__
,__bases__
, cung cấp thông tin về lớp. - Truy cập các Class Attributes có sẵn trong Python: Dùng
ClassName.attribute_name
để lấy giá trị hoặcgetattr(ClassName, "attribute_name")
. - Instance Attributes trong Python: Là thuộc tính riêng của từng instance, chỉ ảnh hưởng đến instance đó.
- So sánh Instance Attributes và Class Attributes: Class attributes được chia sẻ giữa các instance, còn instance attributes chỉ thuộc về từng đối tượng cụ thể.
- Vietnix – Giải pháp lưu trữ tốc độ cao, bảo mật vượt trội: Cung cấp dịch vụ server, hosting, VPS với hiệu suất cao và bảo mật mạnh mẽ.
Class Attributes trong Python là gì?
Class attributes là những biến thuộc về lớp, không phải riêng từng instance (đối tượng) của lớp. Giá trị của class attribute được chia sẻ giữa tất cả các instance và giữ nguyên cho mọi đối tượng trừ khi được thay đổi.
Class attributes được khai báo bên trong lớp nhưng ngoài mọi phương thức. Chúng không thể được khởi tạo trong phương thức __init__()
, vì __init__()
chỉ dùng để thiết lập instance attributes (thuộc tính riêng của từng đối tượng).
Để truy cập class attribute, ta có thể sử dụng tên lớp hoặc thông qua một instance của lớp. Nói cách khác, class attributes có thể được truy cập bởi cả lớp và các đối tượng của nó.

Cách truy cập class attributes trong Python
Trong Python, class attributes có thể được truy cập bằng tên đối tượng (instance) kèm dấu chấm (.
) theo sau là tên thuộc tính.
Ví dụ: Đoạn mã sau minh họa cách truy cập class attributes trong lớp Server
của Vietnix.
class Server:
provider = "Vietnix" # Class Attribute
location = "Vietnam" # Class Attribute
# Tạo một instance của lớp Server
sv = Server()
# Truy cập class attributes thông qua instance
print("Nhà cung cấp:", sv.provider)
print("Vị trí máy chủ:", sv.location)
Kết quả:
Nhà cung cấp: Vietnix
Vị trí máy chủ: Vietnam
Trong ví dụ trên, cả hai class attributes provider
và location
đều được truy cập từ instance sv
. Vì là class attributes, chúng giữ nguyên giá trị và có thể truy cập từ bất kỳ instance nào của lớp Server
.
Thay đổi Class Attributes trong Python
Để thay đổi giá trị của một class attribute, bạn chỉ cần gán giá trị mới cho nó bằng cách sử dụng tên lớp kèm dấu chấm (.
) và tên thuộc tính.
Ví dụ: Dưới đây là ví dụ về cách cập nhật class attribute server_count
trong lớp Server
của Vietnix.
Trong ví dụ dưới đây, mình khởi tạo một class attribute có tên server_count
trong lớp Server
. Mỗi khi một instance (máy chủ) mới được tạo, phương thức __init__()
sẽ tự động được gọi. Phương thức này không chỉ khởi tạo các instance attributes (thuộc tính của từng máy chủ) mà còn tăng giá trị server_count
lên 1, thể hiện tổng số máy chủ của Vietnix.
class Server:
# Class attribute
server_count = 0
def __init__(self, name, location):
self.name = name
self.location = location
# Thay đổi class attribute
Server.server_count += 1
print("Máy chủ:", self.name, "- Vị trí:", self.location)
# Truy cập class attribute
print("Tổng số máy chủ:", Server.server_count)
# Tạo các instance của lớp Server
sv1 = Server("Vietnix Server 1", "Hà Nội")
print()
sv2 = Server("Vietnix Server 2", "TP.HCM")
Kết quả:
Mỗi khi một instance mới được tạo, giá trị của server_count
tăng lên 1, cho thấy số lượng máy chủ của Vietnix đã được cập nhật.
Máy chủ: Vietnix Server 1 – Vị trí: Hà Nội
Tổng số máy chủ: 1
Máy chủ: Vietnix Server 2 – Vị trí: TP.HCM
Tổng số máy chủ: 2
Vai trò của Class Attributes
Class attributes đóng vai trò quan trọng trong Python vì những lý do sau:
- Định nghĩa các thuộc tính có giá trị chung cho mọi instance của lớp.
- Được sử dụng để thiết lập giá trị mặc định cho các đối tượng.
- Hữu ích trong việc tạo singleton, giúp đảm bảo một đối tượng chỉ được khởi tạo một lần duy nhất và có thể được sử dụng ở nhiều phần khác nhau trong code.
Các Class Attributes có sẵn trong Python
Mọi lớp trong Python đều có một số thuộc tính có sẵn (built-in class attributes), có thể được truy cập bằng dấu chấm (.
) như các thuộc tính thông thường:
__dict__
: Từ điển chứa namespace của lớp.__doc__
: Chuỗi tài liệu của lớp (nếu không có, giá trị làNone
).__name__
: Tên của lớp.__module__
: Tên module chứa lớp (trong chế độ tương tác, giá trị là"__main__"
).__bases__
: Tuple chứa các lớp cha của lớp hiện tại, theo thứ tự được khai báo.
Truy cập các Class Attributes có sẵn trong Python
Để truy cập các thuộc tính tích hợp sẵn của lớp trong Python, chúng ta sử dụng tên lớp theo sau bởi dấu chấm (.) và sau đó tên thuộc tính.
Ví dụ: Trong đoạn code dưới đây, Vietnix sử dụng lớp Employee
để truy cập tất cả các thuộc tính có sẵn.
class Employee:
def __init__(self, name="Nguyễn Văn A", age=30):
self.name = name
self.age = age
def displayEmployee(self):
print("Tên:", self.name, ", Tuổi:", self.age)
print("Employee.__doc__:", Employee.__doc__) # Tài liệu của lớp
print("Employee.__name__:", Employee.__name__) # Tên lớp
print("Employee.__module__:", Employee.__module__) # Tên module chứa lớp
print("Employee.__bases__:", Employee.__bases__) # Lớp cha của Employee
print("Employee.__dict__:", Employee.__dict__) # Namespace của lớp
Kết quả: Nó sẽ tạo ra kết quả như bên dưới.
Employee.__doc__: None
Employee.__name__: Employee
Employee.__module__: __main__
Employee.__bases__: (<class ‘object’>,)
Employee.__dict__: {‘__module__’: ‘__main__’, ‘__init__’: <function Employee.__init__ at 0x0000022F866B8B80>, ‘displayEmployee’: <function Employee.displayEmployee at 0x0000022F866B9760>, ‘__dict__’: <attribute ‘__dict__’ of ‘Employee’ objects>, ‘__weakref__’: <attribute ‘__weakref__’ of ‘Employee’ objects>, ‘__doc__’: None}
Instance Attributes trong Python
Instance attributes là những biến thuộc về một đối tượng cụ thể của lớp và được khai báo trong phương thức __init__()
.
Trong phương thức này, tham số đầu tiên luôn là self
, dùng để tham chiếu đến chính đối tượng đó. Các instance attributes được định nghĩa bằng cách gán giá trị cho self.<tên thuộc tính>
trong __init__()
.
Ví dụ: Đoạn code dưới đây minh họa cách hoạt động của instance attributes trong Python.
class Server:
def __init__(self, name, ram):
self.__name = name # Instance attribute
self.__ram = ram # Instance attribute
print("Tên server:", self.__name, ", RAM:", self.__ram)
# Tạo các đối tượng Server
server1 = Server("Vietnix Pro", "32GB DDR5")
server2 = Server("Vietnix Ultra", "64GB DDR5")
Kết quả: Khi chạy code trên, nó sẽ tạo ra kết quả như bên dưới. Với cách này, mỗi server của Vietnix sẽ có thuộc tính riêng, không bị ảnh hưởng bởi các server khác.
Tên server: Vietnix Pro , RAM: 32GB DDR5
Tên server: Vietnix Ultra , RAM: 64GB DDR5
So sánh Instance Attributes và Class Attributes
Bảng dưới đây thể hiện sự khác biệt giữa instance attributes và class attributes trong Python:
STT | Instance Attribute | Class Attribute |
---|---|---|
1 | Được định nghĩa bên trong phương thức __init__() . | Được định nghĩa trong lớp nhưng nằm ngoài phương thức __init__() . |
2 | Truy cập bằng cách sử dụng tên đối tượng kèm dấu chấm (. ). | Có thể truy cập bằng cả tên lớp và tên đối tượng. |
3 | Giá trị không được chia sẻ giữa các đối tượng khác. | Giá trị được chia sẻ giữa tất cả các đối tượng của lớp. |
4 | Thay đổi giá trị chỉ ảnh hưởng đến đối tượng chứa nó. | Thay đổi giá trị sẽ ảnh hưởng đến tất cả các đối tượng của lớp. |
Vietnix – Giải pháp lưu trữ tốc độ cao, bảo mật vượt trội
Vietnix là nhà cung cấp hàng đầu về dịch vụ thuê server, hosting, VPS và domain tại Việt Nam. Với cam kết hiệu suất tối ưu, bảo mật cao và hỗ trợ kỹ thuật 24/7, Vietnix đã được hơn 80.000 khách hàng tin tưởng lựa chọn. Dịch vụ cho thuê máy chủ của Vietnix giúp doanh nghiệp vận hành ổn định, an toàn và hiệu quả.
Thông tin liên hệ:
- Website: https://vietnix.vn/
- Email: sales@vietnix.com.vn
- Hotline: 18001093
- Địa chỉ: 265 Hồng Lạc, Phường 10, Quận Tân Bình, Thành Phố Hồ Chí Minh.
Câu hỏi thường gặp
Class attributes khác gì so với instance attributes?
Class attributes được chia sẻ giữa tất cả các instance của lớp, trong khi instance attributes chỉ thuộc về từng đối tượng cụ thể.
Làm thế nào để truy cập class attributes?
Bạn có thể truy cập class attributes bằng tên lớp (ClassName.attribute_name
) hoặc thông qua một instance (instance.attribute_name
).
Có thể thay đổi class attributes từ một instance không?
Có, nhưng nếu thay đổi trực tiếp từ instance, Python sẽ tạo một instance attribute mới thay vì thay đổi class attribute gốc. Để thay đổi giá trị của class attribute, bạn nên sử dụng cú pháp ClassName.attribute_name = new_value
.
Lời kết
Class attributes là một công cụ mạnh mẽ giúp tổ chức dữ liệu và quản lý trạng thái của các đối tượng trong lập trình Python. Khi sử dụng đúng cách, chúng giúp mã nguồn gọn gàng hơn và dễ bảo trì hơn. Nếu bạn có bất cứ thắc mắc hay cần hỗ trợ gì, hãy để lại bình luận bên dưới, mình sẽ phản hồi sớm nhất. Cảm ơn bạn đã đọc!
Mọi người cũng xem: