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!
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:
- Qua lớp chính nó:
Dog.species
- Qua bất kỳ thể hiện nào của lớp:
fluffy.species
hoặcbuddy.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:
- 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.
- 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
). - Đị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à:
- 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.
- 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__
. - 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