ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Python] 클래스2
    Study/Python 2021. 6. 4. 17:25

    int 클래스

     

    __init__() 생성자를 이용한 객체 생성

     - 아래의 두 가지 방법으로 객체 생성 가능

    a= 10    type(a)    => <class 'int'>

    a = int(10)    type(a)    => <class 'int'>

     - 첫 번째 방법처럼 그냥 a=10이라 해도 __init__() 생성자를 호출

     - 파이썬에서는 정수 객체를 만드는 일이 많아서 간단하게 첫 번째 방법처럼 작성해도 정수 객체를 생성하도록 설계되어있음.

     - 정수 뿐만 아니라 다른 아홉 가지 자료형도 마찬가지

    b = 3.5    type(b)    => <class 'float'>

    b = float(3.5)    type(b)    => <class 'float'>

     

    연산자 중복

     - 메소드에 +나 -같은 연산자 개념이 중복되어 있음.

    메소드  ==  연산 기호

    __add__(self, other)  ==  +

    __sub__(self, other)  ==  -

    __mul__(self, other)  ==  *

    __truediv__(self, other)  ==  /

    ...

    a = 30; b = 7    c = a + b

    이 코드와

    a = int(30); b = int(7)    c = a.__add__(b)

    a = int(30); b = int(7)    c = int.__add__(a, b)

    는 같은 내용의 코드

     

    r로 시작하는 메소드

     - 앞에 r이 붙은 메소드는 피연산자를 바꾸어 계산

    a.__radd__(b)    ==    b + a

     

     

     

    컨테이너 자료형(list, tuple, dict, set) 클래스

     

    컨테이너 자료형과 __메소드들

     - 집합과 사전에 +, * 연산자를 사용할 수 없는 이유는 __add__(), __mul__() 메소드가 없기 때문

     

    __add__의 +연산자 중복, __mul__의 *연산자 중복

     - __add__() 메소드가 있는 자료형은 +연산이 가능

     - __mul__() 메소드가 있는 자료형은 *연산이 가능

     - 집합과 사전 자료형은 __add__(), __mul__() 메소드가 없기 때문에 +, * 연산이 불가능

     

    __contains__(), __len__() 메소드

     - 컨테이너 자료형은 모두 __contains__() 메소드를 갖고 있음. __contains__() 메소드는 in, not in 연산자를 지원

     - 컨테이너 자료형은 각 자료형에 __len__() 메소드가 정의되어 있기 때문에 모두 len() 내장함수를 이용하여 원소의 개수를 구할 수 있음. 's' in A    ==    A.__contains__('s')        len(A)    ==    A.__len__()

     

    range() 반환값과 reversed() 반환값의 비교

     - range() 함수의 반환값 객체는 __len__() 메소드를 갖고 있음.

     - reversed() 함수의 반환값 객체는 __len__() 메소드가 없음.

    len(range(5))    =>    5

    len(reversed([1, 2, 3, 4]))    =>    오류!!

     

    __getitem__() 메소드

     - 시퀀스 자료형과 사전 자료형에서 [] 기호를 이용하여 원소에 접근할 수 있는 것이 __getitem__() 메소드가 지원되기 때문임.    A[2]    ==    A.__getitem__(2)

     

    __setitem__(), __delitem__() 메소드

     - 리스트와 사전에만 있는 메소드(인덱스 개념이 있는 mutable 자료형)

     - 리스트에서 아이템을 수정하거나 삭제하는 메소드

    A[2] = 5    ==    A.__setitem__(2, 5)

    del A[2]    ==    A.__delitem__(2)

     

    __iter__() 메소드

     - 어떤 객체가 iterable인지 판단하는 메소드

     - int 자료형에는 __iter__() 메소드가 없기 때문에(정수는 iterable 객체가 아니기 때문에) for 반복문 사용이 불가능

     

     

     

    __str__, __repr__ 메소드

     - print(리스트 객체), print(집합 객체)는 객체의 데이터 자체가 출력

     - print(프로그래머가 만든 객체)는 객체의 참조값인 id가 출력

     - __str__(), __repr__() 메소드를 이용하면 프로그래머가 만든 객체도 print() 함수를 이용하여 참조값이 아닌 데이터 자체가 출력

    class Dog:

        def __init__(self, name):

            self.name = name

    happy = Dog('Happy')

    print(happy)

        => <__main__.Dog object at ~~>

     - __repr__(), __str__() 메소드는 둘 다 작성해도, 하나만 작성해도 됨. print() 함수를 만나면 __str__() 메소드가 있는지 확인하고, 있으면 __str__() 메소드 실행. 없으면 __repr__()메소드가 있는지 확인하고 있으면 __repr__() 메소드를 실행.

    class Dog:

        def __init__(self, name):

            self.name = name

        def __repr__(self):

            return self.name

    happy = Dog('Happy')

    print(happy)

        => Happy

    'Study > Python' 카테고리의 다른 글

    [Python] 데이터 분석 특강 정리2  (0) 2021.06.30
    [Python] 데이터 분석 특강 실습 정리  (0) 2021.06.29
    [Python] 클래스  (0) 2021.06.01
    [Python] 모듈  (0) 2021.05.25
    [Python] 함수  (0) 2021.05.18
Designed by Tistory.