INTRODUCTION
FLOW CONTROL
FUNCTIONS
DATATYPES
OBJECT & CLASS
Bài tập Python: Lập trình hướng đối tượng (OOP) trong Python Lập trình hướng đối tượng trong Python Class Variables trong Python Tìm hiểu về Methods trong Python Cách sử dụng phương thức __init__() trong Python Các biến Instance trong Python Tìm hiểu về Class Attributes trong Python Hàm Static Methods trong Python Phương thức __str__ trong Python Phương thức __repr__ trong Python Phương thức eq trong Python Tìm hiểu phương thức __hash__ trong Python Phương thức __bool__ trong Python Phương thức del trong Python Tìm hiểu về lớp Property trong Python Tìm hiểu về nạp chồng toán tử trong Python Trình Decorator Property trong Python Thuộc tính chỉ đọc trong Python Thuộc tính Delete trong Python Sử dụng super() trong Python Sử dụng __slots__ trong Python Cách sử dụng Protocol trong Python Sử dụng Enum aliases và @enum.unique trong Python Tùy chỉnh và mở rộng lớp Enum trong Python Cách sử dụng hàm Auto() của Python Single Responsibility Principle trong Python Nguyên tắc Đóng-Mở trong Python Nguyên tắc thay thế Liskov - LSP trong Python Interface Segregation Principle - ISP trong Python. Nguyên tắc đảo ngược sự phụ thuộc trong Python Đa kế thừa trong Python Tìm hiểu về các lớp mixin trong Python Mô tả Descriptors trong Python Phân biệt Data Descriptor và Non-data Descriptor trong Python Phương thức __new__ trong Python Tìm hiểu về Class Type trong Python Lớp Metaclass trong Python Ví dụ sử dụng metaclass trong Python Tìm hiểu về decorator dataclass trong Python Tìm hiểu về các ngoại lệ trong Python Ngoại lệ Raise trong Python Sử dụng câu lệnh raise from trong Python Ngoại lệ tùy chỉnh trong Python Module trong Python Package trong Python Class trong Python Hàm khởi tạo trong Python Kế thừa trong Python Đa kế thừa trong Python Setter và Getter trong Python Override trong Python Interface trong Python Bài tập Python: Module và Class
ADVANCED TOPICS
BỔ SUNG
PYTHON CĂN BẢN
CÁC CHỦ ĐỀ
BÀI MỚI NHẤT
MỚI CẬP NHẬT

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.

test php

banquyen png
Bài viết này được đăng tại freetuts.net, không được copy dưới mọi hình thức.

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à piradius. 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ả piradius đề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ùng chuyên mục:

Hướng dẫn xây dựng Command-Line Interface (CLI) bằng Quo trong Python

Hướng dẫn xây dựng Command-Line Interface (CLI) bằng Quo trong Python

Hướng dẫn toàn diện về module datetime trong Python

Hướng dẫn toàn diện về module datetime trong Python

Cách truy cập và thiết lập biến môi trường trong Python

Cách truy cập và thiết lập biến môi trường trong Python

Lớp dữ liệu (Data Classes) trong Python với decorator @dataclass

Lớp dữ liệu (Data Classes) trong Python với decorator @dataclass

Từ khóa yield trong Python

Từ khóa yield trong Python

Sự khác biệt giữa sort() và sorted() trong Python

Sự khác biệt giữa sort() và sorted() trong Python

Sử dụng Poetry để quản lý dependencies trong Python

Sử dụng Poetry để quản lý dependencies trong Python

Định dạng chuỗi Strings trong Python

Định dạng chuỗi Strings trong Python

Một tác vụ phổ biến khi làm việc với danh sách trong Python

Một tác vụ phổ biến khi làm việc với danh sách trong Python

Làm việc với các biến môi trường trong Python

Làm việc với các biến môi trường trong Python

Sự khác biệt giữa set() và frozenset() trong Python

Sự khác biệt giữa set() và frozenset() trong Python

Sự khác biệt giữa iterator và iterable trong Python

Sự khác biệt giữa iterator và iterable trong Python

Cách làm việc với file tarball/tar trong Python

Cách làm việc với file tarball/tar trong Python

Chuyển đổi kiểu dữ liệu trong Python

Chuyển đổi kiểu dữ liệu trong Python

Sự khác biệt giữa toán tử == và is trong Python

Sự khác biệt giữa toán tử == và is trong Python

Làm việc với file ZIP trong Python

Làm việc với file ZIP trong Python

Cách sử dụng ThreadPoolExecutor trong Python

Cách sử dụng ThreadPoolExecutor trong Python

Sự khác biệt giữa byte objects và string trong Python

Sự khác biệt giữa byte objects và string trong Python

Xử lý độ chính xác các hàm floor, ceil, round, trunc, format  trong Python

Xử lý độ chính xác các hàm floor, ceil, round, trunc, format trong Python

Cách lặp qua nhiều list với hàm zip() trong Python

Cách lặp qua nhiều list với hàm zip() trong Python

Top