Methods thuộc về một đối tượng của một lớp và được sử dụng để thực hiện các thao tác cụ thể. Chúng ta có thể chia các phương thức trong Python thành ba loại khác nhau, đó là phương thức lớp, phương thức thể hiện và phương thức tĩnh.
Một class method trong Python là một phương thức được gán cho lớp và không gán cho thể hiện của lớp. Nó có thể được gọi trên chính lớp, thay vì trên một thể hiện của lớp.
Hầu hết chúng ta thường nhầm lẫn giữa các phương thức lớp và các phương thức tĩnh. Hãy luôn nhớ rằng, trong khi cả hai đều được gọi trên lớp, static methods không có quyền truy cập vào tham số "cls" và do đó nó không thể thay đổi trạng thái của lớp.
Khác với phương thức lớp, instance method có thể truy cập vào variables của một đối tượng. Nó cũng có thể truy cập vào biến lớp vì nó là chung cho tất cả các đối tượng.
Có hai cách để tạo phương thức lớp trong Python:
Python có một hàm tích hợp sẵn classmethod() chuyển đổi một phương thức thể hiện thành một class method có thể được gọi chỉ với tham chiếu đến lớp mà không cần đến đối tượng.
classmethod(instance_method)
Trong lớp Employee, hãy định nghĩa một phương thức thể hiện showcount() với tham số " self " (tham chiếu đến đối tượng gọi). Phương thức này in ra giá trị của empCount. Tiếp theo, hãy chuyển đổi phương thức này thành phương thức lớp counter() có thể được truy cập thông qua tham chiếu lớp.
class Employee: empCount = 0 def __init__(self, name, age): self.__name = name self.__age = age Employee.empCount += 1 def showcount(self): print (self.empCount) counter = classmethod(showcount) e1 = Employee("Bhavana", 24) e2 = Employee("Rajesh", 26) e3 = Employee("John", 27) e1.showcount() Employee.counter()
Gọi showcount() với đối tượng và gọi count() với lớp, cả hai đều hiển thị giá trị của số lượng nhân viên.
3 3
Việc sử dụng decorator @classmethod() là cách được quy định để định nghĩa một phương thức lớp vì nó tiện lợi hơn so với việc đầu tiên khai báo một phương thức thể hiện và sau đó chuyển đổi nó thành một phương thức lớp.
@classmethod def method_name(): # your code
Phương thức lớp hoạt động như một bộ khởi tạo thay thế. Định nghĩa một phương thức lớp newemployee() với các tham số cần thiết để tạo ra một đối tượng mới. Nó trả về đối tượng đã được tạo ra, điều mà phương thức __init__() thực hiện.
class Employee: empCount = 0 def __init__(self, name, age): self.name = name self.age = age Employee.empCount += 1 @classmethod def showcount(cls): print (cls.empCount) @classmethod def newemployee(cls, name, age): return cls(name, age) e1 = Employee("Bhavana", 24) e2 = Employee("Rajesh", 26) e3 = Employee("John", 27) e4 = Employee.newemployee("Anil", 21) Employee.showcount()
Hiện tại có bốn đối tượng Employee. Nếu chúng ta chạy chương trình trên, nó sẽ hiển thị số lượng đối tượng Employee.
4
Thuộc tính lớp là những biến thuộc về một lớp và giá trị của chúng được chia sẻ giữa tất cả các thể hiện của lớp đó.
Để truy cập các thuộc tính của lớp trong một phương thức của lớp, hãy sử dụng tham số cls theo sau là dấu chấm (.) và tên của thuộc tính.
Trong ví dụ này, chúng ta đang truy cập một thuộc tính của lớp trong phương thức của lớp.
class Cloth: # Class attribute price = 4000 @classmethod def showPrice(cls): return cls.price # Accessing class attribute print(Cloth.showPrice())
Khi chạy đoạn mã trên, nó sẽ hiển thị đầu ra sau −
4000
Hàm setattr() trong Python được sử dụng để thiết lập một thuộc tính một cách động. Nếu bạn muốn thêm một phương thức lớp vào một lớp, hãy truyền tên phương thức như một giá trị tham số cho hàm setattr().
Ví dụ dưới đây cho thấy cách thêm một phương thức lớp một cách động vào một lớp Python.
class Cloth: pass # class method @classmethod def brandName(cls): print("Name of the brand is Raymond") # adding dynamically setattr(Cloth, "brand_name", brandName) newObj = Cloth() newObj.brand_name()
Khi chúng ta thực thi đoạn mã trên, nó sẽ hiển thị đầu ra sau −
Name of the brand is Raymond
Toán tử del trong Python được sử dụng để xóa một phương thức của lớp một cách động. Nếu bạn cố gắng truy cập vào phương thức đã bị xóa, mã sẽ gây ra lỗi AttributeError.
Trong ví dụ dưới đây, chúng ta đang xóa phương thức lớp có tên "brandName" bằng cách sử dụng toán tử del.
class Cloth: # class method @classmethod def brandName(cls): print("Name of the brand is Raymond") # deleting dynamically del Cloth.brandName print("Method deleted")
Khi thực thi đoạn mã trên, nó sẽ hiển thị đầu ra sau đây −
Method deleted