Python/기초문법

[Python] 클래스 선언과 객체 생성

묭동이 2023. 12. 30. 15:03

클래스(class)

  • "함수"의 확장
  • 사물의 "설계도"
    • Ex) 차량의 설계도
  • 속성(Attribute)과 메소드(Method)를 가짐
    • Ex) 속성(성질, 상태) : 핸들, 문, 브랜드, 모델명, 연식 등
    • Ex) 메소드(기능, 동작) : 전진, 후진, 정지 등
  • 클래스 생성 방법
    • class '클래스 이름'
      • Ex) class Car:

객체(object)

  • 클래스('설계도')로 부터 만들어낸 사물
  • 객체는 속성과 메소드를 가질 수 있음

 

Attribute(속성) : brand, model, year

Method(메소드) : init(초기화 메소드), start, stop, __str__

  • def __init__(self, ~)
    • 초기화 메소드로 객체를 생성하면 처음으로 실행된다
  • def start(self)
    • 차량의 움직이고 있는 상태에 관련된 메소드
    • 객체를 생성했을 때 처음으로 실행된 is_moving의 값인 False를 체크하여 차량의 상태(정보)를 출력한다
    • 이미 움직이고 있는 경우(= is_moving 값이 True인 경우)
      • 차량이 이미 움직이고 있다고 출력
    • def stop(self)
      • 차량의 정지한 상태에 관련된 메소드ㅡ
      • 객체를 생성했을 때 처음으로 실행된 is_moving의 값인 False를 체크하여 차량의 상태(정보)를 출력한다
      • 이미 정지하고 있는 경우(= is_moving 값이 False인 경우)
        • 차량이 이미 정지했다고 출력
    • def __str__(self)
      • 차량의 연식, 브랜드명, 모델명의 정보를 출력한다

 

 

Car 클래스의 객체인 my_car를 생성

객체를 생성할 때 입력한 "Toyota", "Corolla", 2020 데이터는 초기화 메소드를 통해 저장된다

클래스의 메소드를 사용할 때는 객체명.메소드명(인자)로 사용가능하다

Ex) Car 클래스의 start(), stop(), __str__() 메소드 사용

 

* 객체를 생성할 때 주의할 점 *

초기화 메소드인 init 메소드의 argument 개수와 동일하게 값을 입력해야 함

아래 에러는 init 메소드의 인자 개수와 같지 않게 입력하여 발생한 오류이다

 

클래스 사용의 엄청난 특징은 객체(인스턴스)가 독립적으로 구현이 되며 동시에 실행되고 있다는 점이다

위 코드의 출력 결과

 

 

해당 클래스의 존재하지 않는 메소드를 사용하게 되면 AttributeError가 발생한다

  • "AttributeError": 클래스나 인스턴스에서 찾을 수 없는 속성(변수) 또는 메소드(함수)에 접근하려고 할 때 발생
  • 메소드도 클래스의 속성 중 하나로 간주되므로, 클래스에 정의되지 않은 메소드를 호출하려고 하면 "AttributeError"가 발생

메소드 에러가 아니라 왜 AttributeError가 발생하지? 생각할 수도 있다

이는 파이썬에 MethodError가 존재하지 않기 때문이다