코드는 다음과 같습니다.
으아악
실행 결과:
이 코드 자체에는 문제가 없으며 실행 가능합니다.
제 질문은 def select(car_type): 코드의 일곱 번째 줄이 self가 없어도 실행될 수 있는 이유입니다. 수업을 배울 때 인스턴스 메소드의 모든 메소드는 self 매개변수를 추가해야 한다고 배웠는데 여기에는 아무것도 없습니다. 그런 다음 여기에 self를 추가하고 아래와 같이 오류를 범했습니다.
결과에 오류가 발생했습니다:
왜 이런 일이 일어나는 걸까요?
Python3을 사용하고 있나요?
python3에서 멤버 함수가 self를 추가하지 않으면 해당 함수가 정적 멤버 함수이며 "클래스명.함수명(매개변수)" 형식을 사용하여 직접 호출할 수 있다는 의미입니다.
하지만 self를 추가하면 이 함수는 클래스의 멤버 함수입니다. 다른 호출 클래스에서는 "클래스 이름. 함수 이름(self, 매개변수)"와 같이 호출하거나 호출 클래스에 인스턴스를 구현해야 합니다. , " 인스턴스 이름. 함수 이름(매개변수)
Python3은 이렇습니다. 제 테스트에서는 Python2에는 없습니다.
select 함수에 self를 추가했는데 CarStore::order()에서 호출할 때 "클래스명.함수명(매개변수)" 형식을 사용했기 때문에 틀렸습니다. CarStore::order()를 호출할 때 "클래스명.함수명(자체, 매개변수)"로 변경하거나 CarStore::order()에 "인스턴스명.함수명(매개변수)" 형식으로 인스턴스를 구현한다. 시도해 보세요.
어젯밤에 봤는데 너무 늦어서 오늘 아침에 테스트해봤습니다.
꼭 그럴 필요는 없습니다self
마술이 아닙니다. 어떤 이름으로든 바꿀 수 있습니다self
으아악
으아악
이렇게 작성하면
select
是对象方法,调用需要关联一个实例Factory()
。调用时对象实例是与第一个参数car_type
绑定。这个参数名一般约定为self
그러나 필수는 아닙니다.다음 두 가지 호출 방법이 다르다는 점을 이해해야 합니다.
으아악첫 번째 방법은 인스턴스 개체를 사용하여 호출하는 것입니다. 첫 번째 매개 변수는
car_type
自动与实例对象f
绑定;第二种方式,用类去调用,第一个参数(
car_type
)没有绑定;你需要自己绑定才能不出错——也就是你传进去的car_type
:Factory.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가 어떻게 작동하는지 이해하는 것이 좋습니다. 그렇지 않으면 이러한 유형의 코드를 제대로 작성할 수 없습니다.