본문 바로가기
개발 공부

Python_7-1

by brandnewthinker 2023. 2. 19.
반응형

클래스와 인스턴스

  • 객체(object)는 특정 타입의 인스턴스(instance)

    • 1, 23, 456은 int의 인스턴스
    • ‘hello’, ‘world’는 string의 인스턴스
    • [1, 23, 456], [ ]은 list의 인스턴스
  • 예시

    • 사각형 넓이 구하기(R1=10 * 30/R2=300 * 20)

        class Rectangle:
            def __init__(self, x, y):
                self.x = y
                self.y = y
      
            def area(self):
                return self.x * self.y
      
            def circumference(self):
                return 2 * (self.x + self.y)
      
        r1 = Rectangle(10, 30)
        r1.area()
        r1.circumference()
      
        r2 = Rectangle(300, 20)
        r2.area()
        r2.circumference()
    • 사각형: 클래스(class)

    • 각 사각형(R1, R2): 인스턴스(instance)

    • 사각형의 정보: 속성(attribute)

      • 가로 길이, 세로 길이
    • 사각형의 행동/기능: 메소드(method)

      • 넓이를 구한다. 둘레를 구한다.
  • 인스턴스

    • 생성자 메소드에서 self.name으로 정의

        class Person:
            def __init__(self, name):
                self.name = name # 인스턴스 변수 정의
        john = Person('john')
        print(john.name) # 인스턴스 변수 접근 및 할당
        # john
      
        john.name = 'John Kim' # 인스턴스 변수 접근 및 할당
        print(john.name)
        # John Kim
  • self

    • 인스턴스 자기자신
    • 파이썬에서 인스턴스 메소드는 호출 시 첫번째 인자로 인스턴스 자신이 전달되게 설계 => 매개변수 이름으로 self를 첫번째 인자로 정의
  • 생성자(constructor) 메소드

    • 인스턴스 객체가 생성될 때 자동으로 호출되는 메소드
    • 인스턴스 변수들의 초기값을 설정
      • 인스턴스 생성
      • __ init __ 메소드 자동 호출
  • 소멸자(destructor) 메소드

    • 인스턴스 객체가 소멸(파괴)되기 직전에 호출되는 메소드
    class Person:
    
        # 생성자 메서드 
        def __init__(self, name):
            self.name = name
    
        def greeting(self):
            return f'안녕 난 {self.name}'
    
        # 소멸자 메서드
        def __del__(self):
            print('!')
    
    # 인스턴스 생성
    p1 = Person('홍길동') # __init__메서드가 호출됨
    print(p1.greeting()) # 직접 greeting을 호출!
    # 안녕 난 홍길동
    # !
  • 매직 메소드

    • __ str __ : 해당 객체의 출력 상태를 지정

      • 프린트 함수를 호출할 때, 자동으로 호출
      • 어떤 인스턴스를 출력하면 __ str __의 return 값이 출력
    • __ gt __: 부등호 연산자(>, greater than)

      class Person:
      
        def __init__(self, name, age, mbti):
            self.name = name 
            self.age = age
            self.mbti = mbti
      
        def greeting(self):
            return f'{self.name}입니다. {self.mbti}이구요'
      
        # print(p1 > p2)
        def __gt__(self, other):
            if self.age > other.age:
                return self 
            else:
                return other 
      
        def __str__(self):
            return f'{self.name} ({self.age})'
      
        def __len__(self):
            return self.age
      
      p1 = Person('JOHN', 30, 'istp')
      p2 = Person('jennie', 28, 'enfj')
      print(p1.name)
      print(p1.greeting())
      print(p1 > p2)
      print(p1)
      print(len(p1))
      # JOHN
      # JOHN입니다. istp이구요
      # JOHN (30)
      # JOHN (30)
      # 30
반응형

'개발 공부' 카테고리의 다른 글

Python_7-2  (0) 2023.02.19
Python_6  (0) 2023.02.12
Python_5  (0) 2023.02.12
Python_4  (0) 2023.02.06
Python_3  (0) 2023.02.06

댓글