336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

인스턴스 메서드

 - 객체를 통해서 사용되는 메서드

 - 객체를 생성한 이후에 사용이 가능하며 주로 객체의 속성을 조작, 관리 및 정보의 생성에 이용

 - 첫번째 매개변수로 self가 들어옴


클래스 메서드

 - 클래스를 통해서 사용하며, 따라서 객체의 색성 없이도 사용 가능하다.

 - 클래스 메서드에서는 객체의 속성을 접근하거나 사용하려는 행위는 오류를 발생시킨다. (객체와 관련이 없다)

 - 첫번째 매개변수로 cls(현재 클래스)가 들어옴 

 - 클래스 속성에 대한 연산을 제공

 - 데코레이터(@classmethod) 선언이 필요함


정적 메서드

 - 클래스에 소속된 함수

 - 정적 메서드 또한 클래스 메서드처럼 객체 생성 없이 클래스를 통해서 사용이 가능하다.

 - 정적 메서드와 클래스 메서드의 차이점은 클래스 메서드의 경우 첫 번째 인자로 cls를 넘겨 받지만 정적 메서드는

   첫 번재 인자로 cls를 넘겨받지 않는다

 - 관련된 함수를 모아서 하나의 기능 클래스를 만듬 (외부에 일반적으로 범용 목적으로 만드는 유틸리티 클래스)

    여기에는 속성도 없도 오직 정적 메서드로만 구성이 됨

 - 데코레이터(@staticmethod) 선언이 필요함




'ⓟrogramming > Python' 카테고리의 다른 글

[Python] 소멸자  (0) 2016.10.14
[Python] Special Method - 특별 메서드  (0) 2016.10.14
[Python] 인스턴스 속성과 클래스 속성  (0) 2016.10.13
[Python] 다형성 - Polymorphism  (0) 2016.10.13
[Python] 다중 상속  (0) 2016.10.13
블로그 이미지

뚱땡이 우주인

,
336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.
인스턴스 속성
 - 객체가 가지고 있는 속성
 - 생성자안에서 초기화

클래스 속성
 - 클래스가 가지고 있는 속성

 - 클래스에 하나 존재하고 있으며 이는 모든 객체에서 공유

 - 클래스 이름으로 접근이 가능 (인스턴스로 접근도 가능하다)

 - 클래스 변수는 모든 클래스에서 공유하는 자원이다

 - property 의 변수도 마찬가지로 클래스 변수이다. (외부에서 접근 가능함)

 



블로그 이미지

뚱땡이 우주인

,
336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.
다형성이란 각 객체가 동일한 인터페이스에 대해 서로 다른 동작을 수행하도록 하는 것을 말한다.
 - 객체가 다형성을 띄면 객체 사용에 있어 편리성이 증대된다.

객체지향에서 말하는 인터페이스는 구현부가 없는 메서드이다.

실질적인 구현은 상속받은 클래스에 있다.

airforce.py



bomber.py



fighter.py

war_game.py

결과값 : 


그러나 위 예제에서는 문제가 있다.

1. war_game 내에서 넘어온 인스턴스가 정말 airforce인지 체크를 해야한다.

2. take_off, fly, attack, land 를 구현해야 한다는 강제성이 없다.

   - 인터페이스를 상속 받은 클래스는 반드시 인터페이스의 메소드를 구현해야 하는데 파이썬에서는 이를 강제할 수 있는 방법이 없다. (굉장히 느슨함 - 개발자가 알아서 선택적으로 구현해야 한다)


그러면 war_game에서 airforce 객체만 처리할 수 있도록 수정해보자


머저 기본 object를 상속받는 Car 클래스를 선언하고


기존의 war_game에서 Car 클래스의 인스턴스를 넘겨보도록 한다



다연히 Car 클래스에는 take_off 와 같은 메소드가 없기 때문에 에러가 발생하다.


결국 war_game 메소드안에서 매개변수로 넘어온 인스턴스가 정말 airforce 를 상속받은 클래스인지 체크를 해야 한다

위와 같이 typeid 를 이용하여 체크하면 된다.


그러나 과연 좋은 방법 일까?

war_game 메소드에서 직접 자신 클래스에 대한 type check를 하게 되면 강한 결합이 생기게 된다.


기본적으로 객체지향에서의 설계에서는 느슨한 결합이 되도록 인터페이스를 구현하고 이를 구현하는 함수는 인터페이스를 통해서 각 자식의 기능을 실행해야 한다.

해결 방법은 isinstance 를 이용하여 매개변수로 넘어온 인스턴스가 부모인지 체크하면 된다.


블로그 이미지

뚱땡이 우주인

,