언어/Python

Python class 상속 관련 super() 함수 사용하여 다중 상속

darkdevilness 2021. 12. 28. 00:43
728x90

class 를 사용하다보면, 아래와 같이 사용하는 경우가 발생하고,  class 상속 관련하여 잘 모르면 이부분에서 애를 먹어서 내용을 정리함

class  d( c,b,a): ..... 

요약 내용는 아래와 같고,  sample 코드도 아래와 같이 첨부함. 내용은 간략하므로 실행해 보면,  알 수 있을 것이라 생각함

super().__init__() 나  class 관련 내용은  다른 곳에서 공부하고 오시면 됨.

# Class A  -> Class C::Class B -> Class C -> Class D 순으로 상속을 가져 온다.
# 그래서  __init__() 는 A_init__() -> B_init__() -> C_init_-() -> D_init__() 순으로 실행한다.
# 따라서 Class D의 변수는 마지막 상속 Class , 중간 상속 Class, 최초 상속 Class 순으로 배열한다
# 최초 상속 class 는 super().__init__() 는 사용하지  않아도 된다.
# 그러나 마지막 상속, 중간 상속 Class 는 super().__init__() 를 반드시 넣어 상위 class 의 init() 를 실행한다.
# args 는 super().__init__() 의 변수로 넣어 상위 class 에 값을 전달한다.
class a:
    def __init__(self, *args):
        # super().__init__()
        print("Class A")
        self.v_a = "val-a = {}".format(args)

    def a(self):
        print("Fn-a", self.v_a)


class b:
    def __init__(self, *args):
        super().__init__(*args)
        print("Class B")
        self.v_b = "val-b = {}".format(args)

    def b(self):
        print("Fn-b", self.v_b)


class c(b):
    def __init__(self, *args):
        super().__init__(*args)
        print("Class C")
        self.v_c = "val-c = {}".format(args)

    def c(self):
        print("Fn-c", self.v_c)


class d(c, b, a):
    def __init__(self, *args):
        super().__init__(*args)
        print("Class D")
        self.v_d = "val-d = {}".format(args)

        self.a()
        self.b()
        self.c()
        self.d()

    def d(self):
        print("Fn-d", self.v_d)


def print_hi(name):
    # Use a breakpoint in the code line below to debug your script.
    print(f'Hi, {name}')  # Press ⌘F8 to toggle the breakpoint.


if __name__ == '__main__':
    print_hi('PyCharm')
    d = d("parameter")
728x90