파이썬 클래스에서 사용되는 'cls'변수는 무엇입니까?
파이썬 클래스에서 cls때로는 self인수 대신에 왜 사용 됩니까?
예를 들면 다음과 같습니다.
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)
구별 "self"과는 "cls"에 정의되어 있습니다 PEP 8. Adrien이 말했듯이 이것은 필수가 아닙니다. 코딩 스타일입니다. PEP 8말한다 :
함수 및 메소드 인수 :
self인스턴스 메소드의 첫 번째 인수에는 항상 사용 하십시오.
cls클래스 메소드의 첫 번째 인수에는 항상 사용 하십시오.
클래스 메소드의 경우에 사용됩니다. 자세한 내용은 이 참조 를 확인 하십시오.
편집 : Adrien에 의해 명백한 바와 같이, 그것은 협약입니다. 당신은 실제로 아무것도하지만, 사용할 수 있습니다 cls및 self(사용 PEP8을 ).
clsself는 메소드가 클래스의 인스턴스와 관련되어 있음을 암시하고, 따라서 with의 멤버는 클래스의 인스턴스에 cls의해 액세스되는 클래스 이름으로 액세스됩니다. 동일한 개념입니다. 자바 배경에서 온 경우 static member와 같이 non-static membersJava에서.
이것은 매우 좋은 질문이지만 질문만큼 원하는 것은 아닙니다. 'self'와 'cls'사용 방법에는 유사하지만 동일한 위치에 차이가 있습니다.
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
이제 둘 다 moon 함수를 볼 수 있지만 클래스 내에서 하나를 사용할 수 있고 다른 함수 이름 moon을 모든 클래스에 사용할 수 있습니다.
실용적인 프로그래밍 방식 :
서클 클래스를 디자인하는 동안 영역을 특정 서클 클래스로 제한하지 않기 때문에 area 메소드를 self 대신 cls로 사용합니다.
자체 매개 변수를 승인하는 대신 클래스 메소드 는 메소드가 호출 될 때 오브젝트 인스턴스가 아닌 클래스 를 가리키는 cls 매개 변수를 사용합니다 . 클래스 메소드는이 cls 인수에만 액세스 할 수 있으므로 오브젝트 인스턴스 state를 수정할 수 없습니다 . 그러기 위해서는 self에 액세스해야합니다. 그러나 클래스 메소드는 클래스의 모든 인스턴스에 적용되는 클래스 상태를 여전히 수정할 수 있습니다.
'Python Tricks'책의 크레딧
참고 URL : https://stackoverflow.com/questions/4613000/what-is-the-cls-variable-used-for-in-python-classes
'development' 카테고리의 다른 글
| 코드를 컴파일하기 위해 Makefile과 CMake를 사용하는 것의 차이점 (0) | 2020.04.16 |
|---|---|
| JavaScript에서 맵과 객체 (0) | 2020.04.16 |
| PHP PDO 문은 테이블 또는 열 이름을 매개 변수로 사용할 수 있습니까? (0) | 2020.04.16 |
| 정수 나누기 : 이중을 어떻게 생성합니까? (0) | 2020.04.16 |
| 자바로 DOM 파싱 정규화-어떻게 작동합니까? (0) | 2020.04.16 |