위키북스 박응용 저 "점프 투 파이썬" 책을 읽고 정리한 내용입니다.
다소 잘못된 내용과 구어적 표현 이 포함되어 있을 수 있습니다.
객체와 인스턴스
- 클래스A를 가지고 B를 만들었을때
- B는 객체이다. 즉, 객체는 이놈의 특성 이다
- B는 A의 인스턴스이다. 즉, 인스턴스는 해당 객체가 어떤 클래스를 가지고 만들어진건지 나타내는 관계 이다
객체변수와 클래스 변수
- 객체변수는 객체 내부에서 독립적으로 사용하며 다른 객체에는 영향을 주지않는 용도로 쓰인다
- 클래스 변수는 클래스의 모든 인스턴스에 범용적으로 작용하며 값이 변경되면 모든 객체에서 값이 동기화되어 변경 된다. 이것을 정적인 특성 을 가진다 라고 표현한다
- 객체변수는 클래스 내부의 어느 곳에서나
self.변수
를 통해 선언해줄 수 있지만 해당 클래스에 어떤 객체변수가 존재하는지 한눈에 보기 위해 보통 생성자에서 선언하고 초기화 해준다 - 클래스 변수는 클래스 내부의 최상위 인덴트에 선언 해 주면 된다
- 주의할 점은 클래스 변수의 경우 객체에서 값을 변경해주면 정적인 특성이 작용하지 않고 해당 객체 내부에서만 값이 변경 된다
- 따라서 클래스 변수의 값을 변경하고자 할 때는
클래스.변수
이런식으로 클래스로 접근하여 값을 변경해야 된다 - 클래스는 객체를 만드는 틀이므로 모든 객체에 동일하게 작용하는 클래스 변수의 값을 변경하기 위해서는 틀로 만든 객체에서 값을 변경할게 아니라 틀인 클래스에서 변경하라는 의미 라고 생각하면 된다
메소드의 첫번째 매개변수, self
- 함수와는 다르게 메소드의 경우 해당 메소드를 호출하는 객체가 존재한다
- 파이썬에서는 메소드의 첫번째 매개변수로 해당 메소드를 호출하는 객체가 들어가게 된다
- 근데 보통 객체 자기자신이 메소드를 호출하므로 관례적으로 객체변수 이름을
self
로 해준다. 자바에서의this
와 동일한 의미이다 - 객체를 이용해 메소드 호출시에
객체.메소드()
를 하면 해당 객체가 자동으로self
에 들어가므로 객체로 메소드를 호출할때는 따로self
에 값을 넣어주지 않아도 된다 - 하지만 클래스로 메소드를 호출하게 되면 어떤 객체에서 호출하는지 알 수 없기 때문에
클래스.메소드(객체)
이렇게 어떤 객체에서 호출할지 명시 해줘야 한다