[모르고리즘 2] Mixin

LILO Ghim·2022년 2월 17일
1

기출 문제에 Mixin을 설명해라라는 것이 있는데,
......?

다중상속이라는 것은 알겠고, 대표적인 것이 DRF의 추상화인 것을 알고 있는데,
설명이 안 될 것 같아 찾아본 믹스인

Mixin

  • 상속의 한 종류이지만, 사용에 있어 약간의 차이가 있다.
  • 상속은 핵심 기능을 부모 class에, 부가적인 기능을 자식 class에 구현
  • mixin은 어떤 핵심 기능을 구현한 class가 부가적인 기능을 추가하기 위해 특정 클래스를 상속 받는다.
  • Mixin은 여러 클래스의 일부분을 떼어서, 새로운 자료형을 정의하지 않고 다른 클래스에서 재사용할 속성이나 메소드를 묶어놓은 클래스
  • Mixin할 때, 동일한 속성 및 메소드는 overriding

모르고리즘을 대하는 자로써,
응당 모르는 개념은 따라쳐야지?
대표적인 예시가 아래 코드라서 따라 쳐봤지만

class HelloMixIn:
    def greeting(self):
        print('안녕하세요')
    
 class Person():
    def __init__(self, name):
         self.name = name

 class Student(HelloMixIn, Person):
     def study(self):
         print('공부하기')

 class Teacher(HelloMixIn, Person):
     def teach(self):
         print('가르치기')

 a = Student('lilo')
 a.greeting()

응?...

다시 아래 영상을 보고 1차로 이해를 해 보고,,,,,

일단 뭐 대충 뭔 소린지는 알겠지만,
drf에서도 많이 봤다고 생각했지만,
개념적으로 알기 위해서,
동영상에서 나온 예제만으로는 모르겠어서,

다시 한 번 예제를 바꿔서 + 정말 징글징글한 kwargs를 합쳐서 쳐본다 코드


class A:
    my = '내 '

class B(A):
    def print_i(self):
        print('나다')

class C(A):
    pass

class M:
    # def print_total(self):
    #     print(self.total)
    
    def print_name(self, name, **kwargs):
        result = self.my + "%s %s" %(name, (kwargs.get('iam')))
        print(result)
    
class D(B, M):
    pass

class E(C, M):
    pass

d = D()
d.print_name('이름은', iam='lilo')


내 이름은 lilo


D.mro()
[<class '__main__.D'>, <class '__main__.B'>, <class '__main__.A'>, <class '__main__.M'>, <class 'object'>]

순서대로 상속?
순서대로가 뭔데?


MRO(Method Resolution Order)
crazy debugging 도중 .mro()를 알게되어 처음 쳐봤는데 와우

기똥찼던 블로그!!!
https://tibetsandfox.tistory.com/26

profile
킴릴로

0개의 댓글