찾다

 >  Q&A  >  본문

프로그래밍 초보자가 Python의 클래스 메소드 매개변수에 대해 질문했습니다.

코드는 다음과 같습니다.

으아악

실행 결과:

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

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

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

欧阳克欧阳克2750일 전960

모든 응답(4)나는 대답할 것이다

  • 巴扎黑

    巴扎黑2017-06-22 11:54:02

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

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

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

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

    회신하다
    0
  • 三叔

    三叔2017-06-22 11:54:02

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

    꼭 그럴 필요는 없습니다

    self

    회신하다
    0
  • 为情所困

    为情所困2017-06-22 11:54:02

    으아악

    회신하다
    0
  • PHP中文网

    PHP中文网2017-06-22 11:54:02

    으아악

    이렇게 작성하면 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가 어떻게 작동하는지 이해하는 것이 좋습니다. 그렇지 않으면 이러한 유형의 코드를 제대로 작성할 수 없습니다.

    회신하다
    0
  • 취소회신하다