Python - Thuộc tính của lớp

Xin chào, các nhà lập trình đam mê! Hôm nay, chúng ta sẽ bước vào thế giới thú vị của các thuộc tính lớp trong Python. Đừng lo nếu bạn mới bắt đầu học lập trình; tôi sẽ hướng dẫn bạn qua hành trình này bước به bước, như cách tôi đã làm cho hàng ngàn học viên trong những năm dạy học. Vậy, hãy bắt đầu nào!

Python - Class Attributes

Thuộc tính của lớp (Các biến)

Các thuộc tính của lớp là các biến thuộc về toàn bộ lớp thay vì một thể hiện cụ thể của lớp. Hãy nghĩ về chúng như là các đặc điểm được chia sẻ bởi tất cả các đối tượng của lớp đó.

Hãy bắt đầu với một ví dụ đơn giản:

class Dog:
species = "Canis familiaris"

def __init__(self, name, age):
self.name = name
self.age = age

fluffy = Dog("Fluffy", 3)
buddy = Dog("Buddy", 5)

print(Dog.species)  # Output: Canis familiaris
print(fluffy.species)  # Output: Canis familiaris
print(buddy.species)  # Output: Canis familiaris

Trong ví dụ này, species là một thuộc tính của lớp. Nó được định nghĩa trực tiếp bên trong lớp, nhưng ngoài các phương thức. Tất cả các đối tượng Dog chia sẻ thuộc tính này.

Truy cập các thuộc tính của lớp

Như bạn có thể thấy từ ví dụ trên, bạn có thể truy cập các thuộc tính của lớp theo hai cách:

  1. Qua lớp chính nó: Dog.species
  2. Qua bất kỳ thể hiện nào của lớp: fluffy.species hoặc buddy.species

Cả hai cách đều sẽ đưa ra kết quả tương tự. Đó như hỏi, "Con chó là loài gì?" hoặc "Fluffy là loài gì?" - câu trả lời là cùng một!

Chỉnh sửa các thuộc tính của lớp

Các thuộc tính của lớp có thể được chỉnh sửa, nhưng hãy cẩn thận! Khi bạn chỉnh sửa một thuộc tính của lớp, nó thay đổi cho tất cả các thể hiện của lớp. Hãy xem một ví dụ:

class Cat:
species = "Felis catus"
count = 0

def __init__(self, name):
self.name = name
Cat.count += 1

whiskers = Cat("Whiskers")
mittens = Cat("Mittens")

print(Cat.count)  # Output: 2
print(whiskers.count)  # Output: 2
print(mittens.count)  # Output: 2

Cat.species = "Felis silvestris catus"

print(Cat.species)  # Output: Felis silvestris catus
print(whiskers.species)  # Output: Felis silvestris catus
print(mittens.species)  # Output: Felis silvestris catus

Trong ví dụ này, chúng ta sử dụng một thuộc tính của lớp count để theo dõi số lượng mèo mà chúng ta đã tạo. Mỗi khi chúng ta tạo một đối tượng Cat mới, chúng ta tăng Cat.count. Chúng ta cũng thay đổi species cho tất cả các mèo một lần chỉnh sửa Cat.species.

Tầm quan trọng của các thuộc tính của lớp

Các thuộc tính của lớp rất hữu ích trong nhiều tình huống:

  1. Lưu trữ các hằng số mà nên giống nhau cho tất cả các thể hiện của lớp.
  2. Theo dõi dữ liệu trên tất cả các thể hiện của lớp (như ví dụ Cat.count).
  3. Định nghĩa các giá trị mặc định có thể bị ghi đè bởi các thể hiện nếu cần.

Các thuộc tính của lớp tích hợp sẵn

Python lớp có một số thuộc tính tích hợp sẵn rất hữu ích. Hãy xem một số:

class MyClass:
x = 5

def my_method(self):
pass

print(MyClass.__name__)  # Output: MyClass
print(MyClass.__doc__)  # Output: None (vì chúng ta không cung cấp chuỗi tài liệu)
print(MyClass.__dict__)  # Output: {'__module__': '__main__', 'x': 5, 'my_method': <function MyClass.my_method at ...>}
print(MyClass.__module__)  # Output: __main__

Truy cập các thuộc tính của lớp tích hợp sẵn

Dưới đây là bảng của một số thuộc tính tích hợp sẵn phổ biến và cách truy cập chúng:

Thuộc tính Mô tả Truy cập
name Tên của lớp MyClass.name
doc Chuỗi tài liệu của lớp MyClass.doc
dict Từ điển chứa không gian tên của lớp MyClass.dict
module Tên của mô-đun trong đó lớp được định nghĩa MyClass.module
bases Tuple chứa các lớp cơ bản MyClass.bases

Các thuộc tính của thể hiện

Bây giờ khi chúng ta hiểu về các thuộc tính của lớp, hãy nhanh chóng chạm vào các thuộc tính của thể hiện để thấy sự khác biệt. Các thuộc tính của thể hiện là duy nhất cho mỗi đối tượng được tạo từ lớp.

class Student:
school = "Python High"  # Thuộc tính của lớp

def __init__(self, name, grade):
self.name = name  # Thuộc tính của thể hiện
self.grade = grade  # Thuộc tính của thể hiện

alice = Student("Alice", 10)
bob = Student("Bob", 11)

print(Student.school)  # Output: Python High
print(alice.school)    # Output: Python High
print(bob.school)      # Output: Python High

print(alice.name)      # Output: Alice
print(bob.name)        # Output: Bob

Student.school = "Python University"
print(alice.school)    # Output: Python University
print(bob.school)      # Output: Python University

alice.school = "Python Elementary"
print(alice.school)    # Output: Python Elementary
print(Student.school)  # Output: Python University
print(bob.school)      # Output: Python University

So sánh các thuộc tính của thể hiện và các thuộc tính của lớp

Các khác biệt chính giữa các thuộc tính của thể hiện và các thuộc tính của lớp là:

  1. Các thuộc tính của lớp được chia sẻ bởi tất cả các thể hiện, trong khi các thuộc tính của thể hiện là duy nhất cho mỗi thể hiện.
  2. Các thuộc tính của lớp được định nghĩa trong lớp nhưng ngoài các phương thức, trong khi các thuộc tính của thể hiện thường được định nghĩa trong phương thức __init__.
  3. Thay đổi một thuộc tính của lớp sẽ ảnh hưởng đến tất cả các thể hiện (trừ khi thể hiện đã ghi đè nó), trong khi thay đổi một thuộc tính của thể hiện chỉ ảnh hưởng đến thể hiện đó.

Nhớ rằng, khi bạn cố gắng truy cập một thuộc tính trên một thể hiện, Python sẽ trước hết tìm kiếm một thuộc tính của thể hiện. Nếu nó không tìm thấy, nó sẽ sau đó tìm kiếm một thuộc tính của lớp. Điều này là lý do tại sao chúng ta có thể "ghi đè" một thuộc tính của lớp cho một thể hiện cụ thể bằng cách tạo một thuộc tính của thể hiện có cùng tên.

Và thế là! Bạn đã hoàn thành một khóa học đột ngột về các thuộc tính lớp trong Python. Nhớ rằng, chìa khóa để nắm vững lập trình là thực hành. Vì vậy đừng sợ thử nghiệm các khái niệm này. Tạo ra các lớp của riêng bạn, đùa với các thuộc tính và xem điều gì xảy ra. Chúc bạn mãi mãi mãi hạnh phúc mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mã

Credits: Image by storyset