프로그래밍 초보자가 Python의 클래스 메소드 매개변수에 대해 질문했습니다.
欧阳克
欧阳克 2017-06-22 11:52:02
0
4
942

코드는 다음과 같습니다.

으아악

실행 결과:

이 코드 자체에는 문제가 없으며 실행 가능합니다.
제 질문은 def select(car_type): 코드의 일곱 번째 줄이 self가 없어도 실행될 수 있는 이유입니다. 수업을 배울 때 인스턴스 메소드의 모든 메소드는 self 매개변수를 추가해야 한다고 배웠는데 여기에는 아무것도 없습니다. 그런 다음 여기에 self를 추가하고 아래와 같이 오류를 범했습니다.

결과에 오류가 발생했습니다:

왜 이런 일이 일어나는 걸까요?

欧阳克
欧阳克

温故而知新,可以为师矣。 博客:www.ouyangke.com

모든 응답(4)
巴扎黑

Python3을 사용하고 있나요?
python3에서 멤버 함수가 self를 추가하지 않으면 해당 함수가 정적 멤버 함수이며 "클래스명.함수명(매개변수)" 형식을 사용하여 직접 호출할 수 있다는 의미입니다.
하지만 self를 추가하면 이 함수는 클래스의 멤버 함수입니다. 다른 호출 클래스에서는 "클래스 이름. 함수 이름(self, 매개변수)"와 같이 호출하거나 호출 클래스에 인스턴스를 구현해야 합니다. , " 인스턴스 이름. 함수 이름(매개변수)

Python3은 이렇습니다. 제 테스트에서는 Python2에는 없습니다.

select 함수에 self를 추가했는데 CarStore::order()에서 호출할 때 "클래스명.함수명(매개변수)" 형식을 사용했기 때문에 틀렸습니다. CarStore::order()를 호출할 때 "클래스명.함수명(자체, 매개변수)"로 변경하거나 CarStore::order()에 "인스턴스명.함수명(매개변수)" 형식으로 인스턴스를 구현한다. 시도해 보세요.

어젯밤에 봤는데 너무 늦어서 오늘 아침에 테스트해봤습니다.

三叔

self 마술이 아닙니다. 어떤 이름으로든 바꿀 수 있습니다

꼭 그럴 필요는 없습니다

self

为情所困

으아악

Ty80

으아악

이렇게 작성하면 select是对象方法,调用需要关联一个实例Factory()。调用时对象实例是与第一个参数car_type绑定。这个参数名一般约定为self그러나 필수는 아닙니다.

다음 두 가지 호출 방법이 다르다는 점을 이해해야 합니다.

으아악

첫 번째 방법은 인스턴스 개체를 사용하여 호출하는 것입니다. 첫 번째 매개 변수는 car_type自动与实例对象f绑定;
第二种方式,用类去调用,第一个参数(car_type)没有绑定;你需要自己绑定才能不出错——也就是你传进去的car_typeFactory.selct(car_type)이 줄입니다.

그러나 self后,这个函数有两个参数,但是你只绑定了car_type,也就是绑定到第一个参数self를 추가하면 두 번째는 가치가 없고 뭔가 잘못될 수밖에 없습니다.

여기서 해야 할 일은 실제로 select를 클래스 메서드에 구현하는 것입니다.

으아악

그럼 Factory.select(car_type)调用时,cls自动绑定到Factory,而car_type则绑定到car_type 받아보세요.

위의 내용은 self还是cls에 관계없이 합의된 이름일 뿐입니다. 작동하는 것은 Python의 class-object-method 모델입니다.

"Python 소스 코드 분석"을 읽고 최소한 @classmethod가 어떻게 작동하는지 이해하는 것이 좋습니다. 그렇지 않으면 이러한 유형의 코드를 제대로 작성할 수 없습니다.

최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿