Trong hướng dẫn này, chúng ta sẽ học cách tạo và làm việc với các lớp Python. Đặc biệt, chúng ta sẽ thảo luận về các lớp Python là gì, tại sao chúng ta sử dụng chúng, các loại lớp tồn tại, cách định nghĩa một lớp trong Python và khai báo/điều chỉnh các đối tượng lớp, và nhiều thứ khác
Các lớp trong Python là gì?
Vì Python là ngôn ngữ lập trình hướng đối tượng [OOP], nên mọi thứ trong đó đều đại diện cho một đối tượng. Danh sách, bộ dữ liệu, bộ, từ điển, chức năng, v.v. là tất cả các ví dụ về các đối tượng Python. Nói chung, một đối tượng Python là một thực thể gồm các mục dữ liệu và phương thức mô tả hành vi của các mục đó
Ngược lại, một lớp Python là một mẫu hoặc hàm tạo, được sử dụng để tạo các đối tượng Python. Chúng ta có thể coi nó như một công thức nấu ăn, trong đó tất cả các thành phần và số lượng của chúng, bao gồm cả phạm vi có thể có của chúng, được liệt kê và toàn bộ quá trình nấu ăn được mô tả từng bước. Trong trường hợp này, chúng ta có thể so sánh một công thức làm bánh với một lớp, và một chiếc bánh được nấu theo công thức đó với một đối tượng [i. e. , một thể hiện của lớp đó]. Sử dụng cùng một công thức [lớp], chúng ta có thể tạo ra nhiều loại bánh [đối tượng]. Đây chính xác là phạm vi tạo một lớp trong Python. để xác định các phần tử dữ liệu và các quy tắc thiết lập cách các phần tử này có thể tương tác và thay đổi trạng thái của chúng — sau đó sử dụng nguyên mẫu này để xây dựng các đối tượng khác nhau [các thể hiện của lớp] theo cách được xác định trước, thay vì tạo chúng từ đầu mọi lúc
Các loại lớp trong Python
Bắt đầu với Python 3, các thuật ngữ lớp và loại cho các đối tượng gốc của Python giống hệt nhau, nghĩa là đối với bất kỳ đối tượng nào
a = 5.2
b = 'Hello World'
c = [1, 2, 3]
d = False
e = range[4]
f = [1, 2, 3]
g = complex[1, -1]
for var in [a, b, c, d, e, f, g]:
print[var.__class__]
8, các giá trị của a = 5.2
b = 'Hello World'
c = [1, 2, 3]
d = False
e = range[4]
f = [1, 2, 3]
g = complex[1, -1]
for var in [a, b, c, d, e, f, g]:
print[var.__class__]
9 và
0 đều bằng nhau. Hãy xác nhận điều nàya = 5
b = 'Hello World'
c = [1, 2, 3]
for var in [a, b, c]:
print[type[var]==var.__class__]
True
True
True
Có một số lớp dựng sẵn [kiểu dữ liệu] trong Python. integer, float, string, Boolean, list, range, tuple, set, freezeset, dictionary và một số khác, hiếm khi được sử dụng
a = 5.2
b = 'Hello World'
c = [1, 2, 3]
d = False
e = range[4]
f = [1, 2, 3]
g = complex[1, -1]
for var in [a, b, c, d, e, f, g]:
print[var.__class__]
Các hàm tích hợp và do người dùng định nghĩa có các lớp/loại riêng
def my_func[]:
pass
print[my_func.__class__]
print[min.__class__]
Khi chúng tôi sử dụng các thư viện Python bổ sung, chẳng hạn như gấu trúc hoặc NumPy, chúng tôi có thể tạo các đối tượng của các lớp/loại chỉ liên quan đến các thư viện đó
import pandas as pd
import numpy as np
s = pd.Series[{'a': 1, 'b': 2}]
df = pd.DataFrame[s]
arr = np.array[[1, 2, 3]]
print[s.__class__]
print[df.__class__]
print[arr.__class__]
a = 5.2
b = 'Hello World'
c = [1, 2, 3]
d = False
e = range[4]
f = [1, 2, 3]
g = complex[1, -1]
for var in [a, b, c, d, e, f, g]:
print[var.__class__]
0Tuy nhiên, lợi ích thực sự của các lớp trong Python là chúng ta có thể tạo lớp của riêng mình và sử dụng chúng để giải quyết các tác vụ cụ thể. Hãy xem làm thế nào
Định nghĩa các lớp trong Python
Để định nghĩa một lớp Python, hãy sử dụng từ khóa
1 theo sau là tên của lớp mới và dấu hai chấm. Hãy tạo một lớp trống rất đơn giảna = 5.2
b = 'Hello World'
c = [1, 2, 3]
d = False
e = range[4]
f = [1, 2, 3]
g = complex[1, -1]
for var in [a, b, c, d, e, f, g]:
print[var.__class__]
2Hãy chú ý đến quy ước đặt tên Python cho các lớp. sử dụng kiểu chữ hoa lạc đà, trong đó mỗi từ bắt đầu bằng một chữ in hoa và các từ được viết cùng nhau mà không có bất kỳ dấu phân cách nào. Một quy ước rất được khuyến nghị khác là thêm một chuỗi tài liệu. chuỗi đầu tiên bên trong hàm tạo của lớp mô tả ngắn gọn lớp này dùng để làm gì. Hãy thêm một chuỗi tài liệu vào lớp của chúng tôi
a = 5.2
b = 'Hello World'
c = [1, 2, 3]
d = False
e = range[4]
f = [1, 2, 3]
g = complex[1, -1]
for var in [a, b, c, d, e, f, g]:
print[var.__class__]
3Đoạn mã trên tạo một đối tượng lớp mới có tên là
2. Một lưu ý thú vị ở đây là, bởi vì mọi đối tượng trong Python đều liên quan đến một số lớp [kiểu], nên lớp/kiểu của lớp mới của chúng ta [cũng như tất cả các lớp Python khác, bao gồm cả các lớp dựng sẵn] là kiểuTrue
True
True
0True
True
True
1Hãy trở lại chủ đề chính, mặc dù. Nói chung, khi định nghĩa một lớp mới, chúng ta cũng tạo một
3 mới chứa tất cả các thuộc tính [biến và phương thức] liên quan đến lớp đó. Ngoài ra còn có một số thuộc tính có ý nghĩa đặc biệt, những thuộc tính bắt đầu và kết thúc bằng dấu gạch dưới kép_______24 và có liên quan đến tất cả các lớp. Ví dụ: thuộc tính
5 trả về chuỗi tài liệu của lớp đó hoặc
6, nếu không có chuỗi tài liệu nào được thêm vàoĐể truy cập một thuộc tính lớp, hãy sử dụng toán tử dấu chấm [
7]True
True
True
2Đây là lớp đèn giao thông
True
True
True
3Hàm
8 được định nghĩa bên trong lớp
9 ở trên là một ví dụ về phương thức lớp, trong khi biến def my_func[]:
pass
print[my_func.__class__]
print[min.__class__]
0 là một biến lớpKhai báo đối tượng lớp trong Python
Chúng ta có thể gán một đối tượng lớp cho một biến, tạo một đối tượng mới [thể hiện] của lớp đó. Chúng tôi gọi quá trình này là khởi tạo. Một đối tượng lớp được gán cho một biến là một bản sao của lớp đó với các giá trị thực giúp phân biệt đối tượng này với các đối tượng khác trong cùng một lớp. Quay trở lại ví dụ ẩm thực của chúng ta, đó là một chiếc bánh làm từ 370g bột mì [khi phạm vi trong công thức là 350-400] và có trang trí kẹo trái cây bên trên, thay vì sô cô la
Một đối tượng lớp có các thuộc tính sau
- trạng thái – dữ liệu [biến] của đối tượng
- hành vi – các phương thức của đối tượng
- danh tính – tên duy nhất của đối tượng
Hãy gán một đối tượng lớp của lớp
9 cho một biến def my_func[]:
pass
print[my_func.__class__]
print[min.__class__]
2True
True
True
4Đây là lớp đèn giao thông
True
True
True
5Chúng tôi đã tạo một thể hiện đối tượng mới của lớp
9 được gọi là def my_func[]:
pass
print[my_func.__class__]
print[min.__class__]
2 và truy cập các thuộc tính của nó bằng cách sử dụng tên đối tượng [danh tính]. Lưu ý rằng lớp của đối tượng mới khác với lớp của chính lớp đó là def my_func[]:
pass
print[my_func.__class__]
print[min.__class__]
5 thay vì def my_func[]:
pass
print[my_func.__class__]
print[min.__class__]
6]. Ngoài ra, thuộc tính def my_func[]:
pass
print[my_func.__class__]
print[min.__class__]
7 trả về các giá trị khác nhau cho thể hiện của lớp và chính lớp đó. một đối tượng phương thức trong trường hợp đầu tiên và một đối tượng hàm trong trường hợp thứ hai. Gọi phương thức
8 trên đối tượngdef my_func[]:
pass
print[my_func.__class__]
print[min.__class__]
2 [bằng cách chỉ định
0] cho kết quả "Go", hiện tại, là đầu ra khả dĩ duy nhất của phương thức này của lớp
9Một điều quan trọng khác cần lưu ý trong đoạn mã trên là chúng ta đã sử dụng tham số
2 trong định nghĩa hàm bên trong lớp. Tuy nhiên, khi chúng tôi gọi phương thức
8 trên đối tượngdef my_func[]:
pass
print[my_func.__class__]
print[min.__class__]
2, chúng tôi đã không thêm bất kỳ đối số nào. Đây là cách tham số
2 hoạt động. mỗi khi một thể hiện của lớp gọi một trong các phương thức của nó, thì chính đối tượng đó sẽ được truyền làm đối số đầu tiên. Nói cách khác,
0 tương đương với
7. Tổng quát hơn, khi chúng ta định nghĩa một phương thức lớp Python với một vài tham số, tạo một đối tượng của lớp này và gọi phương thức đó trên đối tượng, Python sẽ chuyển đổi nó dưới dạng sơ đồ sau
8 ➡️
9Do đó, mọi phương thức lớp Python phải có tham số đầu tiên bổ sung này đại diện cho chính đối tượng đó, ngay cả khi nó không có bất kỳ tham số nào khác. Nên gọi nó là
2, theo quy ước đặt tên PythonHãy làm cho lớp học
9 của chúng ta có ý nghĩa hơn, đồng thời giới thiệu một phương pháp đặc biệt mớiTrue
True
True
6True
True
True
7Chúng ta sử dụng phương thức
import pandas as pd
import numpy as np
s = pd.Series[{'a': 1, 'b': 2}]
df = pd.DataFrame[s]
arr = np.array[[1, 2, 3]]
print[s.__class__]
print[df.__class__]
print[arr.__class__]
2 [hay còn gọi là import pandas as pd
import numpy as np
s = pd.Series[{'a': 1, 'b': 2}]
df = pd.DataFrame[s]
arr = np.array[[1, 2, 3]]
print[s.__class__]
print[df.__class__]
print[arr.__class__]
3] để khởi tạo trạng thái của đối tượng [i. e. , để gán tất cả các biến lớp tại thời điểm khởi tạo đối tượng]. Trong trường hợp này, chúng tôi đã tạo một lớp Python mới
9 với hai phương thức. import pandas as pd
import numpy as np
s = pd.Series[{'a': 1, 'b': 2}]
df = pd.DataFrame[s]
arr = np.array[[1, 2, 3]]
print[s.__class__]
print[df.__class__]
print[arr.__class__]
5 để khởi tạo màu đèn giao thông và
8 để đề xuất hành động tương ứng dựa trên màu của đèn giao thôngTạo và xóa thuộc tính đối tượng trong Python
Có thể thêm thuộc tính mới vào đối tượng lớp sau khi khởi tạo
True
True
True
8True
True
True
9____00Trong đoạn mã trên, chúng ta đã tạo một thuộc tính mới
import pandas as pd
import numpy as np
s = pd.Series[{'a': 1, 'b': 2}]
df = pd.DataFrame[s]
arr = np.array[[1, 2, 3]]
print[s.__class__]
print[df.__class__]
print[arr.__class__]
7 cho đối tượng import pandas as pd
import numpy as np
s = pd.Series[{'a': 1, 'b': 2}]
df = pd.DataFrame[s]
arr = np.array[[1, 2, 3]]
print[s.__class__]
print[df.__class__]
print[arr.__class__]
8 và gán thuộc tính đó là "red. " Vì thuộc tính này không có trong định nghĩa của import pandas as pd
import numpy as np
s = pd.Series[{'a': 1, 'b': 2}]
df = pd.DataFrame[s]
arr = np.array[[1, 2, 3]]
print[s.__class__]
print[df.__class__]
print[arr.__class__]
9, nên khi chúng tôi cố gắng kiểm tra nó để tìm một đối tượng khác [a = 5.2
b = 'Hello World'
c = [1, 2, 3]
d = False
e = range[4]
f = [1, 2, 3]
g = complex[1, -1]
for var in [a, b, c, d, e, f, g]:
print[var.__class__]
00], chúng tôi nhận được một a = 5.2
b = 'Hello World'
c = [1, 2, 3]
d = False
e = range[4]
f = [1, 2, 3]
g = complex[1, -1]
for var in [a, b, c, d, e, f, g]:
print[var.__class__]
01Chúng ta có thể xóa bất kỳ thuộc tính nào của một đối tượng lớp bằng cách sử dụng câu lệnh
a = 5.2
b = 'Hello World'
c = [1, 2, 3]
d = False
e = range[4]
f = [1, 2, 3]
g = complex[1, -1]
for var in [a, b, c, d, e, f, g]:
print[var.__class__]
02a = 5.2
b = 'Hello World'
c = [1, 2, 3]
d = False
e = range[4]
f = [1, 2, 3]
g = complex[1, -1]
for var in [a, b, c, d, e, f, g]:
print[var.__class__]
1a = 5.2
b = 'Hello World'
c = [1, 2, 3]
d = False
e = range[4]
f = [1, 2, 3]
g = complex[1, -1]
for var in [a, b, c, d, e, f, g]:
print[var.__class__]
2____03a = 5.2
b = 'Hello World'
c = [1, 2, 3]
d = False
e = range[4]
f = [1, 2, 3]
g = complex[1, -1]
for var in [a, b, c, d, e, f, g]:
print[var.__class__]
4a = 5.2
b = 'Hello World'
c = [1, 2, 3]
d = False
e = range[4]
f = [1, 2, 3]
g = complex[1, -1]
for var in [a, b, c, d, e, f, g]:
print[var.__class__]
5Biến lớp và trường hợp
Sự khác biệt giữa các biến lớp và biến thể hiện là ở chỗ các giá trị của chúng được gán trong một định nghĩa lớp, định nghĩa này cũng xác định phạm vi của các biến
- Biến lớp. được gán trong khai báo lớp nhưng bên ngoài bất kỳ định nghĩa phương thức nào [bao gồm cả hàm tạo của lớp]. Chúng có liên quan đến tất cả các thể hiện đối tượng của lớp đó
- Biến thể hiện. được gán bên trong một phương thức lớp hoặc định nghĩa hàm tạo. Chúng là duy nhất cho từng thể hiện đối tượng của lớp đó
a = 5.2
b = 'Hello World'
c = [1, 2, 3]
d = False
e = range[4]
f = [1, 2, 3]
g = complex[1, -1]
for var in [a, b, c, d, e, f, g]:
print[var.__class__]
6a = 5.2
b = 'Hello World'
c = [1, 2, 3]
d = False
e = range[4]
f = [1, 2, 3]
g = complex[1, -1]
for var in [a, b, c, d, e, f, g]:
print[var.__class__]
7Đối với tất cả các trường hợp lớp ở trên, chúng ta có cùng giá trị của biến
a = 5.2
b = 'Hello World'
c = [1, 2, 3]
d = False
e = range[4]
f = [1, 2, 3]
g = complex[1, -1]
for var in [a, b, c, d, e, f, g]:
print[var.__class__]
03, đây là một biến lớp. Biến def my_func[]:
pass
print[my_func.__class__]
print[min.__class__]
0 được gán bên trong hàm tạo của lớp và biến import pandas as pd
import numpy as np
s = pd.Series[{'a': 1, 'b': 2}]
df = pd.DataFrame[s]
arr = np.array[[1, 2, 3]]
print[s.__class__]
print[df.__class__]
print[arr.__class__]
7 được tính toán bên trong phương thức lớp
8 dựa trên giá trị của def my_func[]:
pass
print[my_func.__class__]
print[min.__class__]
0 cho mỗi thể hiện của lớp. Hai cái này là biến thể hiệnSự kết luận
Tóm lại, chúng ta đã thảo luận về nhiều khía cạnh của việc tạo và sử dụng các lớp Python
- Các lớp Python là gì và khi nào sử dụng chúng
- Các loại lớp tích hợp Python khác nhau
- Mối quan hệ giữa các thuật ngữ lớp và loại cho một đối tượng Python
- Cách định nghĩa một lớp mới trong Python
- Quy ước đặt tên Python cho các lớp
- Thuộc tính lớp là gì và cách truy cập chúng
- Cách khởi tạo một đối tượng lớp
- Các thuộc tính của một đối tượng lớp
- Tham số
2 là gì và nó hoạt động như thế nào - Các thuộc tính của hàm tạo lớp
- Cách truy cập, tạo hoặc xóa các thuộc tính đối tượng lớp
- Sự khác biệt giữa các biến lớp và thể hiện
Bây giờ bạn đã có một bộ công cụ hoàn chỉnh để bắt đầu làm việc với các lớp trong Python
Học Python
Thông tin về các Tác giả
Elena Kosourova
Elena là nhà địa chất dầu khí và quản lý cộng đồng tại Dataquest. Bạn có thể thấy cô ấy trò chuyện trực tuyến với những người đam mê dữ liệu và viết hướng dẫn về các chủ đề khoa học dữ liệu. Tìm cô ấy trên LinkedIn