ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • DRF 공부( python)
    한이음 프로젝트 2023. 7. 31. 00:31

    기초 파이썬 공부

    (클래스, self 등에 대해서 부족한 부분 공부)

     

    • 메서드의 매개변수(self)
    def setdata(self, first, second):  
        self.first = first             
        self.second = second

    파이썬 메서드의 첫 번째 매개변수 이름은 관례적으로 self를 사용함.

    객체를 호출할 때 호출한 객체 자신이 전달되기 때문에 self라는 이름을 사용한 것이다.

    물론 self말고 다른 이름을 사용해도 상관없다.

     

    self.first = 4
    self.second = 2

    -> a.setdata(4, 2)처럼 호출하면 setdata 메서드의 매개변수 first, second에는 각각 값 4와 2가 전달되어 setdata 메서드의 수행문이 다음과 같이 해석된다.

     

    a.first = 4
    a.second = 2

    -> self는 전달된 객체 a이므로 다시 이렇게 해석이 된다.


    • 생성자

    생성자(constructor)란 객체가 생성될 때 자동으로 호출되는 메서드를 의미한다. 파이썬 메서드명으로 __init__를 사용하면 이 메서드는 생성자가 된다.

    def __init__(self, first, second):
        self.first = first
        self.second = second

    __init__ 메서드는 setdata 메서드와 이름만 다르고 모든 게 동일하다. 단, 메서드 이름을 __init__로 했기 때문에 생성자로 인식되어 객체가 생성되는 시점에 자동으로 호출된다는 차이가 있다.

     

    그렇기에  객체를 생성할때 바로 매개변수를 전달해준다.

    a = FourCal(4, 2)

    따라서 __init__ 메서드가 호출되면 setdata 메서드를 호출했을 때와 마찬가지로 first와 second라는 객체변수가 생성될 것이다.


    • 클래스의 상속
    class 클래스_이름(상속할_클래스_이름)

    - 상속을 위해서는 다음처럼 클래스 이름 두 괄호 안에 상속할 클래스 이름을 넣어준다.

     

    ※ 상속 기능을 사용하는 이유?

    더보기

    보통 상속은 기존 클래스를 변경하지 않고 기능을 추가하거나 기존 기능을 변경하려고 할 때 사용한다. ‘클래스에 기능을 추가하고 싶으면 기존 클래스를 수정하면 되는데 왜 굳이 상속을 받아서 처리해야 하지?’라는 의문이 들 수도 있다. 하지만 기존 클래스가 라이브러리 형태로 제공되거나 수정이 허용되지 않는 상황이라면 상속을 사용해야 한다.


    • 메서드 오버라이딩
    >>> class SafeFourCal(FourCal):
    ...     def div(self):
    ...         if self.second == 0:  # 나누는 값이 0인 경우 0을 리턴하도록 수정
    ...             return 0
    ...         else:
    ...             return self.first / self.second

    FourCal 클래스에는 이미 div라는 first/second 메서드가 선언이 되어있다. 그런데 0으로 나누면 에러가 뜨는데 부모 클래스(상속한 클래스)에 있는 메서드를 동일한 이름으로 다시 만드는 것을 메서드 오버라이딩(method overriding)이라고 한다. 이렇게 메서드를 오버라이딩하면 부모 클래스의 메서드 대신 오버라이딩한 메서드가 호출된다.

     

    >>> a = SafeFourCal(4, 0)
    >>> a.div()
    0

     

     

     

     

    05-2 모듈 - 점프 투 파이썬 (wikidocs.net)

     

     

     

     

Designed by Tistory.