Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
Tags
- 엔터프라이즈 블록체인
- 블록체인
- play 강좌
- play2 강좌
- 스칼라
- Hyperledger fabric gossip protocol
- CORDA
- 파이썬 강좌
- 파이썬 데이터분석
- 파이썬 동시성
- 파이썬
- 파이썬 머신러닝
- Golang
- Adapter 패턴
- 하이퍼레저 패브릭
- Play2 로 웹 개발
- akka 강좌
- 안드로이드 웹뷰
- 주키퍼
- hyperledger fabric
- 플레이프레임워크
- 스위프트
- Play2
- 스칼라 동시성
- 이더리움
- 그라파나
- 하이브리드앱
- Actor
- 스칼라 강좌
- Akka
Archives
- Today
- Total
HAMA 블로그
파이썬에서의 믹스인 (Mixin) 본문
Python 과 Mixin
파이썬은 다중 상속을 지원하며 그것에 의해 Mixins 를 만들 수 있다. Mixin 은 클래스에 추가적인 속성이나 메소드를 제공하는 것을 말하는데, 스칼라는 traits 를 통해서 제공하며, 루비등도 제공한다. 파이썬은 Mixin 을 위한 특별한 키워드는 없으며, 단지 다중상속을 통해서 만들기 때문에 이 과정에서 문제가 생길 소지가 생긴다. 스칼라의 경우 stackable traits pattern이라고 동일한 메소드가 있을 경우 순서대로 하나씩 실행되지만 파이썬의 경우 덮어 써 버린다.
다음 예를 살펴보자
class Mixin1(object):
def test(self):
print "Mixin1"
class Mixin2(object):
def test(self):
print "Mixin2"
class MyClass(BaseClass, Mixin1, Mixin2):
pass
파이썬에서는 오른쪽 부터 왼쪽으로 계승이 되는데, 즉 Mixin2 클래스가 가장 상위클래스가 되고 그 후에 Mixin1 , BaseClass 가 차례대로 하위 클래스가 되는데 일반적인 경우 덮어 써질 염려가 없지만 , 위 처럼 메소드 명이 같을 경우 가장 하위의 클래스가 적용되어 덮어 써진다.
>>> obj = MyClass()
>>> obj.test()
Mixin1
따라서 -> 이 쪽으로 갈 수록 상위 클래스라는 것을 명심해야 버그를 줄일 수 있을 것이다.
class MyClass(Mixin2, Mixin1, BaseClass):
pass
>>> obj = MyClass()
>>> obj.test()
Mixin2
개인적으로 상속이나 믹스인보다 컴포지션을 많이 사용한다. 객체지향에 서툴러서 인 걸까? 아니면 먼가 더 달라 붙어있는것을 싫어해서 일까? 대부분의 경우 유연성을 위한 복잡함의 증가로 피부에 와닿았지 훗날의 유지보수에서 득이 되는 경우를 많이 겪어보지 않아서 일까? 물론 is-a , has-a 라는 구분하에 적재적소에 가려 써야 겠지만....말은 참 쉽다. ㅎㅎ
'Python' 카테고리의 다른 글
[Python] 도커 vs Vagrant vs virtualenv (0) | 2017.07.18 |
---|---|
Python 환경 세팅 글 모음 - Virtualevn / Distutils / Setuptools / Docker (0) | 2017.06.30 |
파이썬 마이크로 실전 패턴 [번역] (0) | 2017.06.20 |
파이썬에서 가장 쉽게 범할 수 있는 10가지 실수들 [번역] (0) | 2017.06.15 |
파이썬 주식 패턴 분석 [펌] (0) | 2017.06.12 |
Comments