Trong Python, thuộc tính của class là một khái niệm quan trọng trong lập trình hướng đối tượng (OOP). Thuộc tính của class có thể được chia thành hai loại chính: thuộc tính của class (class attributes) và thuộc tính của instance (instance attributes). Bài viết này sẽ hướng dẫn chi tiết về các loại thuộc tính này, cách sử dụng chúng, và các ví dụ minh họa cụ thể.
Thuộc tính của Class
Thuộc tính của Class (Class Attributes)
Thuộc tính của class là các biến được định nghĩa trực tiếp trong thân của class, bên ngoài bất kỳ phương thức nào. Các thuộc tính này được chia sẻ bởi tất cả các instance của class.
python
class Car:
wheels = 4 # Thuộc tính của class
def __init__(self, color, brand):
self.color = color # Thuộc tính của instance
self.brand = brand # Thuộc tính của instance
Trong ví dụ trên, wheels
là một thuộc tính của class, trong khi color
và brand
là các thuộc tính của instance.
Truy cập và thay đổi thuộc tính của Class
Bạn có thể truy cập và thay đổi thuộc tính của class thông qua tên class hoặc thông qua bất kỳ instance nào của class đó.
python
# Truy cập thuộc tính của class thông qua tên class
print(Car.wheels) # Output: 4
# Truy cập thuộc tính của class thông qua một instance
my_car = Car("red", "Toyota")
print(my_car.wheels) # Output: 4
# Thay đổi thuộc tính của class
Car.wheels = 5
print(Car.wheels) # Output: 5
print(my_car.wheels) # Output: 5
Thuộc tính của Instance
Thuộc tính của Instance (Instance Attributes)
Thuộc tính của instance là các biến được định nghĩa bên trong các phương thức của class, thường là trong phương thức __init__
. Các thuộc tính này chỉ thuộc về một instance cụ thể của class.
python
class Car:
def __init__(self, color, brand):
self.color = color # Thuộc tính của instance
self.brand = brand # Thuộc tính của instance
Truy cập và thay đổi thuộc tính của Instance
Bạn có thể truy cập và thay đổi thuộc tính của instance thông qua instance đó.
python
# Tạo một instance của class Car
my_car = Car("red", "Toyota")
# Truy cập thuộc tính của instance
print(my_car.color) # Output: red
print(my_car.brand) # Output: Toyota
# Thay đổi thuộc tính của instance
my_car.color = "blue"
print(my_car.color) # Output: blue
Sự khác biệt giữa Thuộc tính của Class và Thuộc tính của Instance
Phạm vi truy cập
- Thuộc tính của class: Có thể truy cập thông qua tên class hoặc bất kỳ instance nào của class.
- Thuộc tính của instance: Chỉ có thể truy cập thông qua instance cụ thể.
Phạm vi ảnh hưởng
- Thuộc tính của class: Thay đổi thuộc tính của class sẽ ảnh hưởng đến tất cả các instance của class đó.
- Thuộc tính của instance: Thay đổi thuộc tính của instance chỉ ảnh hưởng đến instance đó.
Ví dụ minh họa
python
class Car:
wheels = 4 # Thuộc tính của class
def __init__(self, color, brand):
self.color = color # Thuộc tính của instance
self.brand = brand # Thuộc tính của instance
# Tạo hai instance của class Car
car1 = Car("red", "Toyota")
car2 = Car("blue", "Honda")
# Truy cập thuộc tính của class và instance
print(carwheels) # Output: 4
print(carwheels) # Output: 4
print(carcolor) # Output: red
print(carcolor) # Output: blue
# Thay đổi thuộc tính của class
Car.wheels = 5
print(carwheels) # Output: 5
print(carwheels) # Output: 5
# Thay đổi thuộc tính của instance
carcolor = "green"
print(carcolor) # Output: green
print(carcolor) # Output: blue
Khi nào nên sử dụng Thuộc tính của Class và Thuộc tính của Instance
Thuộc tính của Class
Thuộc tính của class hữu ích trong các trường hợp sau:
- Lưu trữ các hằng số của class: Ví dụ,
pi
trong classCircle
. - Theo dõi dữ liệu trên tất cả các instance: Ví dụ, đếm số lượng instance của một class.
python
class Circle:
pi = 14159 # Hằng số của class
def __init__(self, radius):
self.radius = radius
def area(self):
return Circle.pi * self.radius ** 2
# Tạo một instance của class Circle
circle = Circle(10)
print(circle.area()) # Output: 31159
Thuộc tính của Instance
Thuộc tính của instance hữu ích khi bạn cần lưu trữ dữ liệu cụ thể cho từng instance.
python
class Student:
def __init__(self, name, age):
self.name = name
self.age = age
# Tạo hai instance của class Student
student1 = Student("Alice", 20)
student2 = Student("Bob", 22)
# Truy cập thuộc tính của instance
print(studentname) # Output: Alice
print(studentname) # Output: Bob
Các phương pháp nâng cao
Sử dụng __dict__
để truy cập các thuộc tính
Cả class và instance đều có thuộc tính đặc biệt __dict__
chứa tất cả các thuộc tính của chúng dưới dạng từ điển.
python
class Car:
wheels = 4
def __init__(self, color, brand):
self.color = color
self.brand = brand
# Tạo một instance của class Car
my_car = Car("red", "Toyota")
# Truy cập thuộc tính __dict__
print(Car.__dict__)
print(my_car.__dict__)
Sử dụng getattr()
, setattr()
, và hasattr()
Các hàm này cho phép bạn truy cập, thiết lập, và kiểm tra sự tồn tại của các thuộc tính một cách động.
python
class Car:
def __init__(self, color, brand):
self.color = color
self.brand = brand
# Tạo một instance của class Car
my_car = Car("red", "Toyota")
# Sử dụng getattr() để truy cập thuộc tính
print(getattr(my_car, "color")) # Output: red
# Sử dụng setattr() để thiết lập thuộc tính
setattr(my_car, "color", "blue")
print(my_car.color) # Output: blue
# Sử dụng hasattr() để kiểm tra sự tồn tại của thuộc tính
print(hasattr(my_car, "brand")) # Output: True
Kết luận
Trong bài viết này, chúng ta đã tìm hiểu về thuộc tính của class trong Python, bao gồm thuộc tính của class và thuộc tính của instance. Chúng ta đã xem xét cách truy cập và thay đổi các thuộc tính này, cũng như khi nào nên sử dụng chúng. Hy vọng rằng các ví dụ minh họa này sẽ giúp bạn hiểu rõ hơn về cách làm việc với các thuộc tính của class trong Python và áp dụng chúng vào các bài toán thực tế của mình.