brunch

You can make anything
by writing

C.S.Lewis

by 내가 사는 세상 Apr 08. 2024

개체지향 - 클래스

멤버함수 오버라이딩

멤버함수 오버라이딩

멤버함수 오버라이딩이란 자식 클래스에서 부모의 멤버함수를 덮어쓰는 것이다. 이러면 덮혀써진 부모의 멤버함수는 사라지진 않지만, 호출이 불가능한 상태가 된다.


class ParentClass:

    def my_method(self):

        print("부모 클래스의 메소드입니다.")


class ChildClass(ParentClass):

    def my_method(self):

        print("자식 클래스에서 오버라이딩한 메소드입니다.")



# 부모 클래스의 인스턴스 생성

parent = ParentClass()


# 자식 클래스의 인스턴스 생성

child = ChildClass()


# 부모 클래스의 메소드 호출

parent.my_method()  # 출력: 부모 클래스의 메소드입니다.


# 자식 클래스에서 오버라이딩한 메소드 호출

child.my_method()   # 출력: 자식 클래스에서 오버라이딩한 메소드입니다.




super() : 덮어쓰여 무능해진 부모의 멤버함수 살려내기


다만 super를 사용해서 덮어쓰여진 부모의 멤버함수를 살려낼 수 있다.


class ParentClass:

    def my_method(self):

        print("부모 클래스의 메소드입니다.")


class ChildClass(ParentClass):

    def my_method(self):

        super().my_method()  # 부모 클래스의 메소드 호출

        print("자식 클래스에서 오버라이딩한 메소드입니다.")


# 자식 클래스의 인스턴스 생성

child = ChildClass()


# 자식 클래스에서 오버라이딩한 메소드 호출

child.my_method()


출력결과

부모 클래스의 메소드입니다. 

자식 클래스에서 오버라이딩한 메소드입니다. 



상속 받은 클래스 초기화


부모 클래스를 상속받아 사용할 때를 생각해보자. 자식 클래스는 초기 생성시 __init__함수를 자동으로 실행한다. 이때 부모의 __init__을 오버라이딩해서, 부모클래스에서 필요로하는 값을 넣어주여야한다. 



class 부모클래스:

    def __init__(self, 변수1, 변수2):

        self.변수1 = 변수1

        self.변수2 = 변수2

    def 출력(self):

        print("부모 클래스의 변수1:", self.변수1)

        print("부모 클래스의 변수2:", self.변수2)


class 자식클래스(부모클래스):

    def __init__(self, 변수1, 변수2, 추가변수):

        super().__init__(변수1, 변수2)  # 부모 클래스의 __init__ 호출하여 변수1, 변수2 설정

        self.추가변수 = 추가변수  # 자식 클래스에서 추가로 설정하는 변수

    def 출력(self):

        super().출력()  # 부모 클래스의 출력 메서드 호출

        print("자식 클래스의 추가변수:", self.추가변수)



# 자식 클래스의 인스턴스 생성

자식 = 자식클래스("부모 변수1 값", "부모 변수2 값", "추가 변수 값")

자식.출력()















매거진의 이전글 기초개념 - nested 함수, 클로저
작품 선택
키워드 선택 0 / 3 0
댓글여부
afliean
브런치는 최신 브라우저에 최적화 되어있습니다. IE chrome safari