본문 바로가기
알고리즘 PS (백준)/🐍 Python (파이썬)

[파이썬 python] 클래스 (객체 , class) 만들기

by 코딩하는 동현😎 2022. 6. 2.

클래스 선언하기

'class' 는 클래스를 만들때 쓰이는 예약어 입니다.

그 뒤에 괄호에는 상속 클래스 등을 써주면 됩니다.

class 클래스명(상속 클래스명):
	속성1
	속성2
	...
	def 메소드1(self, 인자1, 인자2,...):
		<수행할 문장 1>
		<수행할 문장 2>
		...
	def 메소드2(self, 인자1, 인자2,...):
		<수행할 문장1>
		<수행할 문장2>
		...
	...

함수의 인자로는 항상 첫번째로 self를 받는데, 인스턴스화 될 때 각 인스터와 자신을 구분하기 위한 디폴트 인자입니다.

그러므로 명시적으로 호출하지 않고, class 내부에 함수를 만들때 꼭 첫번째 인자로 넣어줘야합니다.


대표적인 클래스 연산자 메소드(오버라이딩)

자바를 배운사람이라면 오버라이딩이라고 생각하시면 됩니다.

  • __init__ : 생성자(constructor)입니다. 인스턴스가 만들어질때 호출합니다.
  • __del__ : (소멸자) 인스턴스가 사라질때 호출됩니다.
  • __add__ : 연산자 '+' 가 이용됐을때 호출합니다 ex) x + y
  • __or__ : 연산자 '|'  ex) x | y
  • __repr__ : print
  • __cmp__ : 비교 ex) x > y

생성자 (__init__) 예시

파이썬에서는 클래스의 변수들을 미리 선언하지 않고 아래처럼 표현할 수 있습니다.
자바에서 this 대신에 self를 씁니다.

class Point:
    x=0
    y=0

    def __init__(self , x=0, y=0):
        self.x = x
        self.y = y
#####################################

class Point:
    def __init__(self , x=0, y=0):
        self.x = x
        self.y = y

인자에 x=0 , y=0 은 인자 값을 안받았을때 기본 값입니다.


소멸자 (__del__) 예시

소멸자는 인스턴스가 소멸될때 자동 수행되는 메소드

주로 메모리에서 제거할 것이 있을때 재정의 합니다.

#point 객체
class Point:
    def __del__(self):
        self.x=0
        self.y=0

연산자 오버라이딩 예시

  • __add__(self , other)
  • __sub__(self , other)
  • __mul__(self , other)
class Point:
    def __add__(self , other):
        self.x += other.x
        self.y += other.y

point3 = point1 + point2

할때 바로 쓰입니다.


접근권한

  • Public(디폴트) : 모든 경우에서 접근가능됩니다.
  • Protected : 자식에게만 상속됩니다
    • 속성 또는 메소드 앞에 '_'를 붙입니다.
  • Private : 자식에게도 상속되지않고 인스턴지 본인만 접근가능
    • 속성 또는 메소드 앞에 '__' 붙입니다.

예외처리

자바에서는 try-catch 이지만 파이썬은 try-except입니다.

try 구문에서 코드를 실행시키고 , except에서는 지정한 예외가 일어날때 처리할 구문이고, finally에선 예외와 관계없이 실행됩니다.

 

1. 0으로 나눌때 생기는 ZeroDivisionError

try:
    num3 = num1 / num2
except ZeroDivisionError as e:
    print(e)
finally:
    print("이 문장은 무조건 출력됩니다.")

2. 존재하지 않는 파일을 열때 생기는 IOError

f = open("nonexistFile.txt" , 'r')
try:
    data = f.read()  #없는 파일이므로 여기서 오류 생김
except IOError as e:
    print(e)
finally:
    f.close() #파일은 어떤 경우에도 닫아야됨
반응형

댓글