Một phương thức lớp là một phương thức được chia sẻ giữa tất cả các đối tượng. Để gọi một phương thức của lớp, hãy đặt lớp đó làm đối số đầu tiên
Các phương thức của lớp có thể được gọi từ các thể hiện và từ chính lớp đó. Tất cả đều sử dụng cùng một phương pháp. Phương thức có thể sử dụng các biến và phương thức của lớp
khóa học liên quan. Hoàn thành khóa học & bài tập lập trình Python
Thí dụ
ví dụ phương pháp lớp học
Để biến một phương thức thành một classmethod, hãy thêm @classmethod trước định nghĩa phương thức. Là tham số, phương thức luôn lấy lớp
Ví dụ dưới đây định nghĩa một phương thức lớp. Phương thức lớp sau đó có thể được sử dụng bởi chính lớp đó. Trong ví dụ này, phương thức lớp sử dụng tên thuộc tính lớp
1
2
3
4
5
6
7
8
class Fruit:
name = 'Fruitas'
@classmethod
def printName[cls]:
print['The name is:', cls.name]
Fruit.printName[]
Bạn có thể sử dụng một phương thức lớp với cả đối tượng và lớp
1
2
3
4
5
6
apple = Fruit[]
berry = Fruit[]
Fruit.printName[]
apple.printName[]
berry.printName[]
Tên tham số hiện thuộc về lớp, nếu bạn thay đổi tên bằng cách sử dụng một đối tượng, nó sẽ bỏ qua điều đó. Nhưng nếu bạn làm điều đó theo lớp thì nó sẽ thay đổi, ví dụ bên dưới
1
2
3
4
5
6
7
8
9
apple.name="Apple"
Fruit.printName[]
apple.printName[]
berry.printName[]
Fruit.name="Apple"
Fruit.printName[]
apple.printName[]
berry.printName[]
viết thay thế
Thường thì ký hiệu Pythonic được sử dụng, nhưng điều này không bắt buộc.
Bạn cũng có thể sử dụng phương thức phân loại như thế này.
1
2
3
4
5
6
7
8
class Fruit:
name = 'Fruitas'
def printName[cls]:
print['The name is:', cls.name]
Fruit.printAge = classmethod[Fruit.printName]
Fruit.printAge[]
classmethod vs staticmethod
Giống như một phương thức tĩnh, một phương thức lớp không cần một đối tượng được khởi tạo
Một phương thức lớp khác với một phương thức tĩnh ở chỗ một phương thức tĩnh không biết về chính lớp đó. Trong một phương thức lớp, tham số luôn là chính lớp đó
một phương thức tĩnh không biết gì về lớp hoặc thể hiện. Bạn cũng có thể sử dụng một cuộc gọi chức năng
một phương thức lớp nhận lớp khi phương thức được gọi. Nó biết về các thuộc tính và phương thức của lớp
Trong bài viết này, tôi sẽ chỉ cho bạn biết
apple.name="Apple"5 và
Fruit.printName[]
apple.printName[]
berry.printName[]
Fruit.name="Apple"
Fruit.printName[]
apple.printName[]
berry.printName[]
>>> norm_product = Supermarket.normalize_product_name["milk "]
'Milk'
>>> obj = Supermarket["Bread", "2022-05-18"]
>>> obj.normalize_product_name["milk "]
'Milk'
0 là gì, tại sao và khi nào bạn nên sử dụng chúng. Bắt đầu nàoSự định nghĩaNếu bạn chưa biết trang trí là gì và nó hoạt động như thế nào, thì trước hết hãy đọc bài viết này
@staticmethod
apple.name="Apple"5 là một trình trang trí tích hợp xác định một phương thức tĩnh trong lớp trong Python. Một phương thức tĩnh không nhận lớp, cũng không phải đối tượng, các đối số cho dù nó được gọi bởi một thể hiện của một lớp hay bởi chính lớp đó
Fruit.printName[]
apple.printName[]
berry.printName[]
Fruit.name="Apple"
Fruit.printName[]
apple.printName[]
berry.printName[]
Đặc điểm
- Khai báo một phương thức tĩnh trong lớp
- Nó không thể có tham số
>>> norm_product = Supermarket.normalize_product_name["milk "]
2 hoặc
'Milk'
>>> obj = Supermarket["Bread", "2022-05-18"]
>>> obj.normalize_product_name["milk "]
'Milk'>>> norm_product = Supermarket.normalize_product_name["milk "]
3
'Milk'
>>> obj = Supermarket["Bread", "2022-05-18"]
>>> obj.normalize_product_name["milk "]
'Milk' - Phương thức tĩnh không thể truy cập các thuộc tính lớp hoặc thuộc tính thể hiện
- Phương thức tĩnh có thể được gọi bằng cách sử dụng
>>> norm_product = Supermarket.normalize_product_name["milk "]
4 và cũng có thể sử dụng
'Milk'
>>> obj = Supermarket["Bread", "2022-05-18"]
>>> obj.normalize_product_name["milk "]
'Milk'>>> norm_product = Supermarket.normalize_product_name["milk "]
5
'Milk'
>>> obj = Supermarket["Bread", "2022-05-18"]
>>> obj.normalize_product_name["milk "]
'Milk' - Nó có thể trả về một đối tượng của lớp
Ví dụ sau khai báo một phương thức tĩnh
class Fruit:3
name = 'Fruitas'
@classmethod
def printName[cls]:
print['The name is:', cls.name]
Fruit.printName[]
Ở trên, lớp
>>> norm_product = Supermarket.normalize_product_name["milk "]
'Milk'
>>> obj = Supermarket["Bread", "2022-05-18"]
>>> obj.normalize_product_name["milk "]
'Milk'
6 khai báo phương thức >>> norm_product = Supermarket.normalize_product_name["milk "]
'Milk'
>>> obj = Supermarket["Bread", "2022-05-18"]
>>> obj.normalize_product_name["milk "]
'Milk'
7 là một phương thức tĩnh sử dụng trình trang trí apple.name="Apple"5. Lưu ý rằng nó không thể có tham số
Fruit.printName[]
apple.printName[]
berry.printName[]
Fruit.name="Apple"
Fruit.printName[]
apple.printName[]
berry.printName[]
>>> norm_product = Supermarket.normalize_product_name["milk "]
'Milk'
>>> obj = Supermarket["Bread", "2022-05-18"]
>>> obj.normalize_product_name["milk "]
'Milk'
3 hoặc >>> norm_product = Supermarket.normalize_product_name["milk "]
'Milk'
>>> obj = Supermarket["Bread", "2022-05-18"]
>>> obj.normalize_product_name["milk "]
'Milk'
2Phương thức tĩnh có thể được gọi bằng cách sử dụng
>>> norm_product = Supermarket.normalize_product_name["milk "]
'Milk'
>>> obj = Supermarket["Bread", "2022-05-18"]
>>> obj.normalize_product_name["milk "]
'Milk'
4 hoặc >>> norm_product = Supermarket.normalize_product_name["milk "]
'Milk'
>>> obj = Supermarket["Bread", "2022-05-18"]
>>> obj.normalize_product_name["milk "]
'Milk'
5________số 8@classmethod
113 là một trình trang trí tích hợp xác định một phương thức lớp trong lớp trong Python. Một phương thức lớp chỉ nhận các đối số lớp. Phương thức lớp có thể được gọi bằng cách sử dụng
2
3
4
5
6
>>> norm_product = Supermarket.normalize_product_name["milk "]
'Milk'
>>> obj = Supermarket["Bread", "2022-05-18"]
>>> obj.normalize_product_name["milk "]
'Milk'
4 hoặc >>> norm_product = Supermarket.normalize_product_name["milk "]
'Milk'
>>> obj = Supermarket["Bread", "2022-05-18"]
>>> obj.normalize_product_name["milk "]
'Milk'
5113 là một thay thế của hàm
2
3
4
5
6
117. Nên sử dụng trình trang trí
2
3
4
5
6
113 thay vì chức năng vì nó chỉ là đường cú pháp
2
3
4
5
6
Đặc điểm
- Khai báo một phương thức lớp
- Tham số đầu tiên phải là
>>> norm_product = Supermarket.normalize_product_name["milk "]
2, có thể được sử dụng để truy cập các thuộc tính của lớp
'Milk'
>>> obj = Supermarket["Bread", "2022-05-18"]
>>> obj.normalize_product_name["milk "]
'Milk' - Phương thức lớp chỉ có thể truy cập các thuộc tính lớp chứ không thể truy cập các thuộc tính thể hiện
- Phương thức lớp có thể được gọi bằng cách sử dụng
>>> norm_product = Supermarket.normalize_product_name["milk "]
4 và cũng có thể sử dụng
'Milk'
>>> obj = Supermarket["Bread", "2022-05-18"]
>>> obj.normalize_product_name["milk "]
'Milk'>>> norm_product = Supermarket.normalize_product_name["milk "]
5
'Milk'
>>> obj = Supermarket["Bread", "2022-05-18"]
>>> obj.normalize_product_name["milk "]
'Milk' - Nó có thể trả về một đối tượng của lớp
Ví dụ sau khai báo một phương thức lớp
11
2
3
4
5
6
Ở trên, lớp
>>> norm_product = Supermarket.normalize_product_name["milk "]
'Milk'
>>> obj = Supermarket["Bread", "2022-05-18"]
>>> obj.normalize_product_name["milk "]
'Milk'
6 chứa thuộc tính lớp apple = Fruit[]23 và thuộc tính thể hiện
berry = Fruit[]
Fruit.printName[]
apple.printName[]
berry.printName[]
apple = Fruit[]24. Phương thức
berry = Fruit[]
Fruit.printName[]
apple.printName[]
berry.printName[]
apple = Fruit[]25 được trang trí bằng trình trang trí
berry = Fruit[]
Fruit.printName[]
apple.printName[]
berry.printName[]
113 làm cho nó trở thành một phương thức lớp, có thể được gọi bằng cách sử dụng
2
3
4
5
6
apple = Fruit[]27. Lưu ý rằng tham số đầu tiên của bất kỳ phương thức lớp nào phải là
berry = Fruit[]
Fruit.printName[]
apple.printName[]
berry.printName[]
>>> norm_product = Supermarket.normalize_product_name["milk "]
'Milk'
>>> obj = Supermarket["Bread", "2022-05-18"]
>>> obj.normalize_product_name["milk "]
'Milk'
2 có thể được sử dụng để truy cập các thuộc tính của lớp. Bạn có thể đặt bất kỳ tên nào cho tham số đầu tiên thay vì >>> norm_product = Supermarket.normalize_product_name["milk "]
'Milk'
>>> obj = Supermarket["Bread", "2022-05-18"]
>>> obj.normalize_product_name["milk "]
'Milk'
2Phương thức lớp có thể được gọi bằng cách sử dụng
>>> norm_product = Supermarket.normalize_product_name["milk "]
'Milk'
>>> obj = Supermarket["Bread", "2022-05-18"]
>>> obj.normalize_product_name["milk "]
'Milk'
4 hoặc >>> norm_product = Supermarket.normalize_product_name["milk "]
'Milk'
>>> obj = Supermarket["Bread", "2022-05-18"]
>>> obj.normalize_product_name["milk "]
'Milk'
5apple = Fruit[]2
berry = Fruit[]
Fruit.printName[]
apple.printName[]
berry.printName[]
Nhưng trong phương thức lớp, bạn không thể sử dụng thuộc tính thể hiện
12
2
3
4
5
6
7
8
9
Khi nào bạn nên sử dụng các phương thức tĩnh?
1. Nhóm chức năng tiện ích cho một lớp
Các phương thức tĩnh có trường hợp sử dụng hạn chế bởi vì, giống như các phương thức lớp hoặc bất kỳ phương thức nào khác trong một lớp, chúng không thể truy cập các thuộc tính của chính lớp đó
Tuy nhiên, khi bạn cần một hàm tiện ích không truy cập bất kỳ thuộc tính nào của một lớp, nhưng có nghĩa là nó thuộc về lớp, chúng ta sử dụng các hàm tĩnh
Ví dụ: bạn đã thêm chức năng thay đổi định dạng tốt nhất trước ngày
13
2
3
4
5
6
7
8
9
Đây là một phương thức tĩnh vì nó không cần truy cập bất kỳ thuộc tính nào của chính
>>> norm_product = Supermarket.normalize_product_name["milk "]
'Milk'
>>> obj = Supermarket["Bread", "2022-05-18"]
>>> obj.normalize_product_name["milk "]
'Milk'
6 và chỉ yêu cầu các tham số2. Có một triển khai duy nhất
15
2
3
4
5
6
7
8
9
Khi nào bạn nên sử dụng phương thức lớp?
Bạn có thể sử dụng các phương thức lớp cho bất kỳ phương thức nào không bị ràng buộc với một thể hiện cụ thể nhưng lớp. Trong thực tế, bạn thường sử dụng các phương thức của lớp cho các phương thức tạo một thể hiện của lớp
1. phương pháp xuất xưởng
Các phương thức xuất xưởng là những phương thức trả về một đối tượng lớp cho các trường hợp sử dụng khác nhau. Ví dụ
16
2
3
4
5
6
7
8
9
Trong trường hợp này, hàm add_product[] chỉ tạo một đối tượng lớp mới [một sản phẩm mới và tốt nhất trước ngày]
2. Tạo phiên bản chính xác trong kế thừa
Bất cứ khi nào bạn dẫn xuất một lớp từ việc triển khai một phương thức xuất xưởng làm phương thức lớp, nó đảm bảo việc tạo thể hiện chính xác của lớp dẫn xuất
Bạn có thể tạo một phương thức tĩnh, nhưng đối tượng mà nó tạo ra sẽ luôn được mã hóa cứng dưới dạng Lớp cơ sở
Tuy nhiên, khi bạn sử dụng một phương thức của lớp, nó sẽ tạo ra thể hiện đúng của lớp dẫn xuất
17
2
3
4
5
6
7
8
9
Ở đây, sử dụng một phương thức tĩnh để tạo một thể hiện của lớp, muốn chúng tôi mã hóa cứng loại thể hiện trong quá trình tạo
Điều này rõ ràng gây ra sự cố khi kế thừa
>>> norm_product = Supermarket.normalize_product_name["milk "]
'Milk'
>>> obj = Supermarket["Bread", "2022-05-18"]
>>> obj.normalize_product_name["milk "]
'Milk'
6 thành 124
2
3
4
5
6
7
8
9
Phương thức
125 không trả về đối tượng
2
3
4
5
6
7
8
9
126, nhưng đối tượng của lớp cơ sở của nó là
2
3
4
5
6
7
8
9
127
2
3
4
5
6
7
8
9
Điều này vi phạm mô hình OOP. Sử dụng một phương thức lớp như
128 có thể đảm bảo tính OOP của mã vì nó lấy tham số đầu tiên làm chính lớp đó và gọi phương thức xuất xưởng của nó
2
3
4
5
6
7
8
9
Sự kết luận
Trong bài viết này, chúng tôi đã phân tích
apple.name="Apple"5 và
Fruit.printName[]
apple.printName[]
berry.printName[]
Fruit.name="Apple"
Fruit.printName[]
apple.printName[]
berry.printName[]
>>> norm_product = Supermarket.normalize_product_name["milk "]
'Milk'
>>> obj = Supermarket["Bread", "2022-05-18"]
>>> obj.normalize_product_name["milk "]
'Milk'
0 là gì và tìm hiểu cách thức, địa điểm và lý do sử dụng chúng- Chúng tôi thường sử dụng @classmethod để tạo các phương thức xuất xưởng. Các phương thức xuất xưởng trả về các đối tượng lớp cho các trường hợp sử dụng khác nhau
- Chúng tôi thường sử dụng các phương thức tĩnh để tạo và nhóm các hàm tiện ích
Chia sẻ suy nghĩ và ý kiến của bạn trong phần bình luận, nhấp vào “Vỗ tay” nếu bài viết hữu ích và thú vị đối với bạn. Click “Theo dõi” để luôn nhận được những bài viết hữu ích