Classmethod và staticmethod Python

Đối với những người mới bắt đầu học lập trình hướng đối tượng trong Python, điều rất cần thiết là phải nắm vững phương thức lớp và phương thức tĩnh để viết mã được tối ưu hóa hơn và có thể tái sử dụng

Ngoài ra, điều rất phổ biến là ngay cả những lập trình viên có kinh nghiệm đến từ các ngôn ngữ khác nhau cũng bị nhầm lẫn giữa hai ngôn ngữ này.

Trong bài viết này, chúng ta sẽ hiểu rõ hơn về phương thức lớp và phương thức tĩnh trong Python

Phương thức tĩnh trong Python

Một

class Myclass[]:
    @staticmethod
    def staticmethod[]:
        print['static method called']
6 là một phương thức không biết gì về lớp hoặc thể hiện mà nó được gọi trừ khi được đưa ra một cách rõ ràng. Nó chỉ nhận các đối số đã được thông qua, không có đối số ngầm định đầu tiên và định nghĩa của nó là bất biến thông qua kế thừa

Nói một cách đơn giản hơn,

class Myclass[]:
    @staticmethod
    def staticmethod[]:
        print['static method called']
6  không gì khác hơn là một hàm thông thường được xác định bên trong một lớp không có quyền truy cập vào thể hiện, do đó, nó có thể được gọi mà không cần khởi tạo lớp

cú pháp

class ClassName:
    @staticmethod
    def method_name[arg1, arg2, ...]: ...

Chúng tôi sử dụng trình trang trí

class Myclass[]:
    @staticmethod
    def staticmethod[]:
        print['static method called']
6 để xác định một phương thức tĩnh trong Python, ở đây bạn có thể quan sát thấy rằng phương thức tĩnh không lấy self làm đối số cho phương thức

Bây giờ hãy xem một ví dụ

class Myclass[]:
    @staticmethod
    def staticmethod[]:
        print['static method called']

Như chúng ta đã thảo luận, chúng ta có thể truy cập phương thức tĩnh của một lớp mà không cần tạo đối tượng

Myclass.staticmethod[]

đầu ra

static method called

Mặc dù gọi phương thức từ một thể hiện của lớp cũng có thể

my_obj = Myclass[]
my_obj.staticmethod[]

đầu ra

static method called

Tuyệt vời, nhưng khi nào các phương thức tĩnh hữu ích?

Phương thức tĩnh giúp đạt được sự đóng gói trong lớp Python vì nó không biết trạng thái của thể hiện hiện tại. Ngoài ra, các phương thức tĩnh làm cho mã dễ đọc hơn và có thể tái sử dụng cũng như nhập thuận tiện hơn so với các hàm cấp mô-đun vì mỗi phương thức không phải được nhập đặc biệt

class Person[]:
    @staticmethod
    def is_adult[age]:
        if age > 18:
            return True
        else:
            return False

Trong ví dụ trên, chúng ta có thể kiểm tra xem người đó có phải là người lớn hay không bắt đầu lớp học

class Myclass[]:
    @staticmethod
    def staticmethod[]:
        print['static method called']
0

đầu ra

class Myclass[]:
    @staticmethod
    def staticmethod[]:
        print['static method called']
1

Phương thức lớp trong Python

class Myclass[]:
    @staticmethod
    def staticmethod[]:
        print['static method called']
9 là một phương thức nhận lớp làm đối số đầu tiên ngầm định, giống như một phương thức thể hiện nhận thể hiện. Điều này có nghĩa là bạn có thể sử dụng lớp và các thuộc tính của nó bên trong phương thức đó thay vì một thể hiện cụ thể

Vì vậy, về cơ bản,

class Myclass[]:
    @staticmethod
    def staticmethod[]:
        print['static method called']
9 là một phương thức của một lớp có quyền truy cập vào mọi thuộc tính của lớp mà nó được gọi. Do đó, một phương thức lớp là một phương thức được liên kết với lớp chứ không phải đối tượng của lớp

cú pháp

class Myclass[]:
    @staticmethod
    def staticmethod[]:
        print['static method called']
4

Trình trang trí

class Myclass[]:
    @staticmethod
    def staticmethod[]:
        print['static method called']
9 được sử dụng để tạo phương thức lớp và
Myclass.staticmethod[]
2 phải là đối số đầu tiên của mọi phương thức lớp

class Myclass[]:
    @staticmethod
    def staticmethod[]:
        print['static method called']
0

Các hàm

class Myclass[]:
    @staticmethod
    def staticmethod[]:
        print['static method called']
9 cũng có thể gọi được mà không cần khởi tạo lớp, nhưng định nghĩa của nó tuân theo Lớp con, không phải Lớp cha mẹ, thông qua kế thừa

class Myclass[]:
    @staticmethod
    def staticmethod[]:
        print['static method called']
1

đầu ra

class Myclass[]:
    @staticmethod
    def staticmethod[]:
        print['static method called']
2

Vậy khi nào thì sử dụng các phương thức của lớp?

class Myclass[]:
    @staticmethod
    def staticmethod[]:
        print['static method called']
9 dành cho khi bạn cần có các phương thức không dành riêng cho bất kỳ trường hợp cụ thể nào, nhưng vẫn liên quan đến lớp theo một cách nào đó. Điều thú vị nhất về chúng là chúng có thể bị ghi đè bởi các lớp con

Vì vậy, nếu bạn muốn truy cập toàn bộ một thuộc tính của một lớp chứ không phải thuộc tính của một thể hiện cụ thể của lớp đó, hãy sử dụng một phương thức lớp

class Myclass[]:
    @staticmethod
    def staticmethod[]:
        print['static method called']
3

đầu ra

class Myclass[]:
    @staticmethod
    def staticmethod[]:
        print['static method called']
4

Bây giờ nếu chúng ta kế thừa lớp này thành một lớp con và khai báo biến

Myclass.staticmethod[]
5 ở đó và gọi phương thức lớp từ lớp con, nó sẽ trả về tổng số đối tượng cho lớp con

class Myclass[]:
    @staticmethod
    def staticmethod[]:
        print['static method called']
5

đầu ra

class Myclass[]:
    @staticmethod
    def staticmethod[]:
        print['static method called']
9 được sử dụng trong một siêu lớp để xác định phương thức đó sẽ hoạt động như thế nào khi nó được gọi bởi các lớp con khác nhau. Trong khi đó,
class Myclass[]:
    @staticmethod
    def staticmethod[]:
        print['static method called']
6 được sử dụng khi chúng ta muốn trả về cùng một thứ bất kể lớp con mà chúng ta đang gọi

Ngoài ra, hãy lưu ý rằng việc gọi một

class Myclass[]:
    @staticmethod
    def staticmethod[]:
        print['static method called']
9 liên quan đến việc cấp phát bộ nhớ bổ sung mà việc gọi một hàm
class Myclass[]:
    @staticmethod
    def staticmethod[]:
        print['static method called']
6 hoặc thông thường thì không

Sự khác biệt giữa phương thức lớp và phương thức tĩnh trong Python là gì?

Các phương thức của lớp không cần thể hiện của lớp. Họ không thể truy cập thể hiện [ self ] nhưng họ có quyền truy cập vào chính lớp đó thông qua cls. Các phương thức tĩnh không có quyền truy cập vào cls hoặc self . Chúng hoạt động giống như các hàm thông thường nhưng thuộc về không gian tên của lớp.

Sự khác biệt giữa @staticmethod và Classmethod là gì?

Hàm @staticmethod không gì khác hơn là một hàm được định nghĩa bên trong một lớp. Nó có thể gọi được mà không cần khởi tạo lớp trước. Định nghĩa của nó là bất biến thông qua thừa kế. Hàm @classmethod cũng có thể gọi được mà không cần khởi tạo lớp, nhưng định nghĩa của nó tuân theo Lớp con, không phải Lớp cha mẹ, thông qua kế thừa

Mục đích của Classmethod và Staticmethod trong Python là gì?

Phương thức lớp so với Phương thức tĩnh . Một phương thức lớp có thể truy cập hoặc sửa đổi trạng thái lớp trong khi một phương thức tĩnh không thể truy cập hoặc sửa đổi nó. Nói chung, các phương thức tĩnh không biết gì về trạng thái lớp. A class method takes cls as the first parameter while a static method needs no specific parameters. A class method can access or modify the class state while a static method can't access or modify it. In general, static methods know nothing about the class state.

@staticmethod trong lớp Python là gì?

@staticmethod là 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 bất kỳ đối số tham chiếu nào 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 đó.

Chủ Đề