스터디/혼자공부하는파이썬

chapter08. 클래스(2)

냠냠쿠 2024. 5. 2. 20:58
728x90

 

1. 어떤 클래스의 인스턴스인지 확인하기

isinstance(인스턴스, 클래스)

해당 인스턴스가 해당 클래스를 기반으로 만들어졌으면 True 상관없는 인스턴스와 클래스인경우 False 리턴

 

단순 인스턴스를 확인하는 경우 아래와 같이 사용할 수도 있다.

 type(인스턴스) == 클래스

 

2. 특이한 이름의 함수

이름 영어 설명
eq equal 같다
ne not equal 다르다
gt great than 크다
ge greather than or equal 크거나 같다
lt less than 작다
le  less then or equal 작거나 같다

 

 

3. 클래스 변수와 메서드

 

- 클래스 변수 만들기

class 클래스이름:
    클래스 변수 = 값

 

- 클래스 변수에 접근하기

클래스이름.변수이름

 

- 클래스 함수 만들기

class 클래스이름:
    @classmethod  #데코레이터
    def 클래스 함수(cls, 매개변수):
        pass

 

- 클래스 함수 호출하기

클래스 이름.함수이름(매개변수)

 

 

4. 가비지 컬렉터

- 변수에 저장 X

class Test:
    def __init__(self, name):
      self.name = name
      print("{} 생성".format(self.name))
    def __del__(self):
      print("{}파괴".format(self.name))


Test("A")
Test("B")
Test("C")

 

- 변수에 저장 O

class Test:
    def __init__(self, name):
      self.name = name
      print("{} 생성".format(self.name))
    def __del__(self):
      print("{}파괴".format(self.name))


a= Test("A")
b= Test("B")
c= Test("C")

변수에 저장한 경우 가비지 컬렉터가 차후에 사용 될 수 있다고 판단하여 프로그램이 종료되는 순간까지 데이터를 메모리에서 제거하지 않는다.

 

5. 프라이빗 변수 만들기

__변수이름

 

6. 게터세터

- 외부에서 직접 프라이빗 변수에 접근 할 수 없기 때문에 간접적으로 접근할 수 있도록 해 줌

#게터 세터 선언
def get_radius(self):
    return self.__radius
  
def set_radius(self, value):
    return self.__radius = value
    

#간접적으로 접근 
circle.get_radius()

 

- 데코레이터를 사용한 게터세터 만들기

import math

class Circle:

...

  @property
  def radius(self):
    return self.radius
  
  @radius.setter
  def radisu(self, value):
    if value<=0:
      raise TypeError("길이는 양의 숫자여야 함")
      self.__radius = value
  
  ...

 

7. 상속

- 상속 : 만들어둔 형태에 내가 원하는 것만 추가하거나 교체

- 다중 상속 : 누군가 만들어 놓은 형태를 조립해서 내가 원하는 것을 다시 만드느는 것

class Parent:
  def __init__(self):
    self.value ="test"
    print("parent 클래스의 __init()")
  def Child(Parent):
    super().__init__()
    print("child 클래스의 __init()")


child = Child()
child.test()
print(child.value)

 

 

8. 예외클래스 만들기

class CustomException(Exception):
  def __init__(self):
    super().__init__()

raise CustomException

 

- 오버라이드하기 

class CustomException(Exception):
  def __init__(self):
    super().__init__()
    print("내가 만든 오류")

  def __str__(self):
    return "오류발생쓰"

raise CustomException

 

728x90