Khóa học python

Thuộc tính của Class trong Python

0 phút đọc

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.

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 colorbrand 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 đó.

# 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.

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 đó.

# 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

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 class Circle.
  • 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.
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.

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.

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.

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.

Avatar
Được viết bởi

TechMely Team

Gợi ý câu hỏi phỏng vấn

entry

Bạn có thể nói sự khác biệt giữa cấu trúc dữ liệu tuyến tính và phi tuyến tính?

entry

Danh sách liên kết là tuyến tính hay phi tuyến tính?

entry

How to call base class constructor from child class in TypeScript?

Bình luận

Chưa có bình luận nào

Chưa có bình luận nào