Khi nào tôi nên sử dụng các phương thức lớp python?

Ngoài các phương thức thể hiện - là thành viên lớp phổ biến nhất trong ngữ cảnh lập trình hướng đối tượng - các lớp trong Python cũng có thể có các phương thức tĩnh và lớp. Ngôn ngữ đi kèm với hai bộ trang trí, cụ thể là

employee_1 = Employee['Andrew', 'Brown', 85000]
print[employee_1.first_name]
print[employee_1.salary]
'Andrew'
85000
8 và
employee_1 = Employee['Andrew', 'Brown', 85000]
print[employee_1.first_name]
print[employee_1.salary]
'Andrew'
85000
9 , cho phép chúng tôi xác định các thành viên như vậy trong các lớp. Điều quan trọng là phải hiểu các khái niệm này vì chúng sẽ giúp bạn viết Python hướng đối tượng rõ ràng hơn và có cấu trúc phù hợp và cuối cùng sẽ giúp việc bảo trì dễ dàng hơn nhiều

Trong bài viết này, chúng ta sẽ khám phá chức năng của cả hai, cách tạo chúng và trong trường hợp nào bạn nên sử dụng cái này thay vì cái kia

Hãy dành một chút thời gian để xem qua mã bên dưới vì mã này sẽ được sử dụng làm lớp Python mẫu mà chúng ta sẽ sử dụng để khám phá một số khái niệm

class Employee:    NO_OF_EMPLOYEES = 0

def __init__[self, first_name, last_name, salary]:
self.first_name = first_name
self.last_name = last_name
self.salary = salary
self.increment_employees[]
def give_raise[self, amount]:
self.salary += amount
@classmethod
def employee_from_full_name[cls, full_name, salary]:
split_name = full_name.split[' ']
first_name = split_name[0]
last_name = split_name[1]
return cls[first_name, last_name, salary]
@classmethod
def increment_employees[cls]:
cls.NO_OF_EMPLOYEES += 1
@staticmethod
def get_employee_legal_obligations_txt[]:
legal_obligations = """
1. An employee must complete 8 hours per working day
2. ...
"""
return legal_obligations

Phương thức lớp [@classmethod]

Một phương thức lớp chấp nhận chính lớp đó làm đối số ẩn và -tùy chọn- bất kỳ đối số nào khác được chỉ định trong định nghĩa. Điều quan trọng là phải hiểu rằng một phương thức lớp không có quyền truy cập vào các thể hiện của đối tượng [giống như các phương thức thể hiện]. Do đó, các phương thức lớp không thể được sử dụng để thay đổi trạng thái của một đối tượng được khởi tạo mà thay vào đó, chúng có khả năng thay đổi trạng thái lớp được chia sẻ giữa tất cả các thể hiện của lớp đó

Các phương thức lớp thường hữu ích khi chúng ta cần truy cập vào chính lớp đó - ví dụ: khi chúng ta muốn tạo một phương thức xuất xưởng, đó là phương thức tạo các thể hiện của lớp. Nói cách khác, các phương thức lớp có thể đóng vai trò là các hàm tạo thay thế

Trong mã ví dụ của chúng tôi, một thể hiện của

employee_1 = Employee['Andrew', 'Brown', 85000]
print[employee_1.first_name]
print[employee_1.salary]
'Andrew'
85000
0 có thể được xây dựng bằng cách cung cấp ba đối số;

employee_1 = Employee['Andrew', 'Brown', 85000]
print[employee_1.first_name]
print[employee_1.salary]
'Andrew'
85000

Bây giờ, hãy giả sử rằng có khả năng tên của Nhân viên có thể được cung cấp trong một trường duy nhất trong đó họ và tên được phân tách bằng khoảng trắng. Trong trường hợp này, chúng ta có thể sử dụng phương thức lớp có tên là

employee_1 = Employee['Andrew', 'Brown', 85000]
print[employee_1.first_name]
print[employee_1.salary]
'Andrew'
85000
3 chấp nhận tổng cộng ba đối số. Cái đầu tiên, chính là lớp, là một đối số ngầm có nghĩa là nó sẽ không được cung cấp khi gọi phương thức - Python sẽ tự động làm điều này cho chúng ta

employee_2 = Employee.employee_from_full_name['John Black', 95000]
print[employee_2.first_name]
print[employee_2.salary]
'John'
95000

Lưu ý rằng cũng có thể gọi

employee_1 = Employee['Andrew', 'Brown', 85000]
print[employee_1.first_name]
print[employee_1.salary]
'Andrew'
85000
3 từ các thể hiện đối tượng mặc dù trong ngữ cảnh này, điều đó không có nhiều ý nghĩa

________số 8

Một lý do khác tại sao chúng ta có thể muốn tạo một phương thức lớp, là khi chúng ta cần thay đổi trạng thái của lớp. Trong ví dụ của chúng ta, biến lớp

employee_1 = Employee['Andrew', 'Brown', 85000]
print[employee_1.first_name]
print[employee_1.salary]
'Andrew'
85000
5 theo dõi số lượng nhân viên hiện đang làm việc cho công ty. Phương thức này được gọi mỗi khi một phiên bản mới của
employee_1 = Employee['Andrew', 'Brown', 85000]
print[employee_1.first_name]
print[employee_1.salary]
'Andrew'
85000
0 được tạo và nó cập nhật số đếm tương ứng

employee_1 = Employee['Andrew', 'Brown', 85000]
print[employee_1.first_name]
print[employee_1.salary]
'Andrew'
85000
0

Phương thức tĩnh [@staticmethod]

Mặt khác, trong các phương thức tĩnh, cả trường hợp [i. e.

employee_1 = Employee['Andrew', 'Brown', 85000]
print[employee_1.first_name]
print[employee_1.salary]
'Andrew'
85000
7 ] cũng như bản thân lớp học [i. e.
employee_1 = Employee['Andrew', 'Brown', 85000]
print[employee_1.first_name]
print[employee_1.salary]
'Andrew'
85000
8 ] được thông qua dưới dạng đối số ngầm định. Điều này có nghĩa là các phương thức như vậy, không có khả năng truy cập vào chính lớp đó hoặc các thể hiện của nó

Bây giờ người ta có thể lập luận rằng các phương thức tĩnh không hữu ích trong ngữ cảnh của các lớp vì chúng cũng có thể được đặt trong các mô-đun trợ giúp thay vì thêm chúng làm thành viên của lớp. Trong lập trình hướng đối tượng, điều quan trọng là cấu trúc các lớp của bạn thành các khối hợp lý và do đó, các phương thức tĩnh khá hữu ích khi chúng ta cần thêm một phương thức bên dưới một lớp đơn giản vì nó thuộc về lớp đó.

Trong ví dụ của chúng ta, phương thức tĩnh có tên

employee_1 = Employee['Andrew', 'Brown', 85000]
print[employee_1.first_name]
print[employee_1.salary]
'Andrew'
85000
9 chỉ đơn giản trả về một chuỗi chứa các nghĩa vụ pháp lý của từng nhân viên trong công ty. Chức năng này, không tương tác với chính lớp cũng như với bất kỳ trường hợp nào. Nó có thể đã được đặt vào một mô-đun trợ giúp khác, tuy nhiên, nó chỉ liên quan đến lớp này và do đó chúng ta phải đặt nó dưới lớp
employee_1 = Employee['Andrew', 'Brown', 85000]
print[employee_1.first_name]
print[employee_1.salary]
'Andrew'
85000
0

Một phương thức tĩnh có thể được truy cập trực tiếp từ lớp

employee_1 = Employee['Andrew', 'Brown', 85000]
print[employee_1.first_name]
print[employee_1.salary]
'Andrew'
85000
4

hoặc từ một thể hiện của lớp

employee_1 = Employee['Andrew', 'Brown', 85000]
print[employee_1.first_name]
print[employee_1.salary]
'Andrew'
85000
5

Sự kết luận

Trong bài viết này, chúng tôi đã đề cập đến cách hoạt động của các phương thức tĩnh và lớp trong Python cũng như những lý do chính mà bạn nên sử dụng phương thức này thay vì phương thức kia

Các phương thức lớp có thể được tạo bằng cách sử dụng

employee_1 = Employee['Andrew', 'Brown', 85000]
print[employee_1.first_name]
print[employee_1.salary]
'Andrew'
85000
9decorator và chúng được sử dụng để truy cập chính lớp đó nhưng đồng thời, chúng không có khả năng truy cập các cá thể riêng lẻ. Chúng chủ yếu hữu ích khi chúng ta cần tạo các hàm tạo thay thế, đó là một phương thức lớp tạo một thể hiện của cùng một lớp [có thể chấp nhận các đối số hơi khác nhau]

Mặt khác, một phương thức tĩnh có thể được xây dựng thông qua trình trang trí

employee_1 = Employee['Andrew', 'Brown', 85000]
print[employee_1.first_name]
print[employee_1.salary]
'Andrew'
85000
8 nhưng nó trái ngược với các phương thức lớp hoặc thể hiện, nó không nhận bất kỳ đối số ngầm định nào [không phải
employee_1 = Employee['Andrew', 'Brown', 85000]
print[employee_1.first_name]
print[employee_1.salary]
'Andrew'
85000
7 hay
employee_1 = Employee['Andrew', 'Brown', 85000]
print[employee_1.first_name]
print[employee_1.salary]
'Andrew'
85000
8] và do đó chúng không thể truy cập lớp hoặc các thể hiện của nó. Chúng thường hữu ích khi chúng ta cần đặt một thành viên vào một lớp chỉ vì nó thuộc về nó một cách logic.

Cả hai loại phương pháp này đều có thể giúp bạn viết mã được cấu trúc theo cách dễ đọc và dễ bảo trì

Lợi ích của phương thức lớp trong Python là gì?

Nó làm rõ hơn rằng phương thức không sử dụng bất kỳ trạng thái nào từ thể hiện , thường được đặt tên là self. Ngoài ra, điều đó có nghĩa là bạn có thể kiểm tra nó trên lớp mà không cần tạo một thể hiện.

Điểm của phương pháp lớp là gì?

Trong Python, trình trang trí @classmethod được sử dụng để khai báo một phương thức trong lớp dưới dạng một phương thức lớp có thể được gọi bằng ClassName. Tên phương thức []. Phương thức lớp cũng có thể được gọi bằng cách sử dụng một đối tượng của lớp

Tại sao chúng ta sử dụng phương thức lớp và phương thức tĩnh trong Python?

Các phương thức Tĩnh được sử dụng để thực hiện một số tác vụ tiện ích và các phương thức lớp được sử dụng cho các phương thức xuất xưởng . Các phương thức xuất xưởng có thể trả về các đối tượng lớp cho các trường hợp sử dụng khác nhau.

Chủ Đề