2011-01-06 13 views
155

Tại sao cls đôi khi được sử dụng thay vì self làm đối số trong các lớp Python?Biến 'cls' được sử dụng trong các lớp Python là gì?

Ví dụ:

class Person: 
    def __init__(self, firstname, lastname): 
     self.firstname = firstname 
     self.lastname = lastname 

    @classmethod 
    def from_fullname(cls, fullname): 
     cls.firstname, cls.lastname = fullname.split(' ', 1) 

Trả lời

46

Nó được sử dụng trong trường hợp của một phương pháp học. Kiểm tra this reference để biết thêm chi tiết.

EDIT: Được làm rõ bởi Adrien, đó là quy ước. Bạn thực sự có thể sử dụng bất cứ điều gì nhưng clsself được sử dụng (PEP8).

173

Sự khác biệt giữa "self""cls" được xác định trong PEP 8. Như Adrien đã nói, đây không phải là bắt buộc. Đó là một phong cách mã hóa. PEP 8 nói:

Chức năng và phương pháp lập luận:

Luôn luôn sử dụng self cho đối số đầu tiên với các phương pháp dụ.

Luôn sử dụng cls cho đối số đầu tiên cho các phương pháp lớp học.

2

Đây là câu hỏi hay nhưng không phải là câu hỏi. Có sự khác biệt giữa 'tự' và phương pháp sử dụng 'cls' mặc dù loại suy họ đang ở cùng một nơi

def moon(self,moon_name): 
 
    self.MName =moon_name 
 
    
 
#but here cls method its use is different 
 

 

 
def moon(cls,moon_name): 
 
    instance=cls() 
 
    instance.MName=moon_name

Bây giờ bạn có thể thấy cả hai đều là chức năng mặt trăng nhưng người ta có thể được sử dụng bên trong lớp trong khi mặt trăng tên hàm khác có thể được sử dụng cho bất kỳ lớp nào.

Đối với phương pháp lập trình thực hiện:

Trong khi thiết kế lớp vòng tròn chúng tôi sử dụng khu vực phương pháp như CLS thay vì tự vì chúng ta không muốn khu vực được giới hạn ở lớp học đặc biệt chỉ có vòng tròn.

Các vấn đề liên quan