오답노트

[Python3] 클래스(Class) 본문

Python

[Python3] 클래스(Class)

권멋져 2022. 7. 3. 20:34

Class

객체 지향 프로그래밍에서 객체를 만들어내기 위한 설계도와 같다.

 

Class 선언

class test_class:
  lst = ["test_class"]

  def __init__(self,a,b,c):
    self.var_a = a;
    self.var_b = b;
    self.var_c = c;

  def append(self):
    test_class.lst.append(self.var_a)
    test_class.lst.append(self.var_b)
    test_class.lst.append(self.var_c)

  def print(self):
    print(self.var_a)
    print(self.var_b)
    print(self.var_c)
    print(test_class.lst)

위 코드는 test_class 라는 클래스를 선언하는 코드이다.

class 클래스명 : 으로 선언하며

아래 줄 들여쓰기 부터 해당 클래스의 선언부이다.

 

Class 생성자

클래스의 생성자를 정의할 떄는 def __init__ () 함수를 선언한다.

이 때 위 코드에서 인자를 보면 self라는 인자가 있는데, self는 파이썬에서 약속된 문법이며, 클래스의 인스턴스를 뜻한다.

 

Class의 속성 종류

클래스에는 인스턴스 속성과 클래스 속성이 존재한다.

클래스 속성은 굳이 생성자가 호줄되지 않더라도, 클래스를 선언했을 때 값이 입력되어 있다. (입력을 안했으면 없음)

하지만 인스턴스 속성은 생성자를 호출하지 않으면 인스턴스 속성은 생성되지 않는다.

 

class test_class:
  lst = ["test_class"]

  def __init__(self,a,b,c):
    self.var_a = a;
    self.var_b = b;
    self.var_c = c;

  def append(self):
    test_class.lst.append(self.var_a)
    test_class.lst.append(self.var_b)
    test_class.lst.append(self.var_c)

  def print(self):
    print(self.var_a)
    print(self.var_b)
    print(self.var_c)
    print(test_class.lst)


print("test_class.lst : ",test_class.lst)

test = test_class(1,"a","test")
print("test.print() : ")
test.print()

위 코드의 결과는 아래와 같다.

사진 2-2. 클래스 속성과 인스턴스 속성에 대한 출력 결과

사진 2-2 와 같이 test_class의 생성자를 호출하지 않더라도 클래스 속성은 호출할 수 있다.

하지만 인스턴스 속성은 test_class에 대한 변수를 만들고, 생성자를 호출해야만 한다.

 

Class 상속

class test_class:
  lst = ["test_class"]

  def __init__(self,a,b,c):
    self.var_a = a;
    self.var_b = b;
    self.var_c = c;

  def append(self):
    test_class.lst.append(self.var_a)
    test_class.lst.append(self.var_b)
    test_class.lst.append(self.var_c)

  def print(self):
    print(self.var_a)
    print(self.var_b)
    print(self.var_c)
    print(test_class.lst)


class test_child(test_class):
  def __init__(self,a,b,c,d,e):
    self.var_a = a
    self.var_b = b
    self.var_c = c
    self.var_d = d
    self.var_e = e

  def print(self):
    print(self.var_a,self.var_b,self.var_c,self.var_d,self.var_e)
    print(test_class.lst)

test = test_child(1,2,3,4,5)

test.print()
test.append()
test.print()

클래스의 상속은 클래스를 선언할 때, 괄호를 열어 부모가 될 클래스를 입력하면 된다.

자식 클래스는 부모의 메소드 또는 클래스 속성을 가져와 사용할 수 있다.

또 괄호에 클래스명을 여러 개를 입력하여 다중 상속을 받을 수 있다.

 

'Python' 카테고리의 다른 글

[Python3] 파일 읽기/쓰기  (0) 2022.07.06
[Python3] 문자열  (0) 2022.07.05
[Python3] 딕셔너리  (0) 2022.06.30
[Python3] 데이터 슬라이싱, in, in not  (0) 2022.06.28
[Python3] Tuple(튜플)  (0) 2022.06.28