본문 바로가기

AI/python

파이썬(Python) 클래스 요약

핵심 키워드

  • class
  • instance
  • inheritance

학습 요약

  • 클래스는 딥러닝 프로그램을 작성할 때 자주 사용된다.
    • 클래스: 붕어빵 틀에 비유할 수 있다.
    • 인스턴스: 붕어빵 틀에서 생성된 붕어빵에 비유할 수 있다.
  • 간단히 사람(human)에 대한 정보를 담는 사람 클래스를 정의해 보자.
  • 프로그램 내에서 두 명의 사람을 처리한다면?
    • 각 사람은 나이(age)가 다를 수 있다.
class Human:
    def __init__(self):
        self.age = 0

    def old(self):
        self.age += 1

human1 = Human() # 사람 인스턴스 생성
human2 = Human() # 사람 인스턴스 생성

for i in range(10): # 10세
    human1.old()
for i in range(20): # 20세
    human2.old()

# 각 사람의 나이 출력
print(human1.age)
print(human2.age)
  • 클래스(class)는 여러 정보를 하나의 객체에 담을 때 사용할 수 있다.
  • 학생 관리 프로그램을 만들 때, 학생에 대한 정보는 다양하다.
    • ① 학번, ② 이름, ③ 나이, ④ 성별, ⑤ 학과
  • 학생 인스턴스를 생성함과 동시에 정보를 초기화할 수 있다.
    • 생성자: 인스턴스가 생성될 때 자동으로 실행되는 init() 메서드를 의미한다.
  • self는 인스턴스(instance) 자기 자신을 의미한다.
  • 해당 인스턴스가 가지는 값과 함수의 인자 값을 구분하여 이해해야 한다.
  • init() 함수 내부를 고려해 보자.
    • self.name: 현재 인스턴스의 name 변수
    • name: 함수의 파라미터로 넘어 온 name 변수
class Student:
    def __init__(self, id, name, age, gender, department):
        self.id = id
        self.name = name
        self.age = age
        self.gender = gender
        self.department = department

    def show(self):
        print("===== 학생 정보 =====")
        print(f"학번: {self.id}")
        print(f"이름: {self.name}")
        print(f"나이: {self.age}")
        print(f"성별: {self.gender}")
        print(f"학과: {self.department}")

    def add_age(self, offset):
        self.age += offset

student1 = Student("20200001", "홍길동", 20, "남성", "컴퓨터공학과")
student2 = Student("20200002", "김순자", 21, "여성", "산업디자인공학과")
student3 = Student("20200003", "임꺽정", 23, "남성", "환경공학과")

student1.show()
student2.show()
student3.show()
  • 각 인스턴스의 인스턴스 변수는 서로 다르다.
  • 특정한 클래스(class)의 모든 인스턴스끼리 공유되는 정보가 필요하다면?
  • 클래스 변수: 해당 클래스에서 전체적으로 공유되는 변수
    • Client의 클래스 변수는 Client 클래스의 네임스페이스에 존재한다.
  • 인스턴스 변수: 구체적인 하나의 인스턴스에서 사용되는 변수
    • client1의 인스턴스 변수는 client1 인스턴스의 네임스페이스에 존재한다.
class Client:
    client_cnt = 0

    def __init__(self, id, name, age, gender, point):
        self.id = id
        self.name = name
        self.age = age
        self.gender = gender
        self.point = point
        Client.client_cnt += 1

    def show(self):
        print("===== 고객 정보 =====")
        print(f"고객 번호: {self.id}")
        print(f"이름: {self.name}")
        print(f"나이: {self.age}")
        print(f"성별: {self.gender}")
        print(f"고객 점수: {self.point}")
        print(f"현재 총 고객 수: {Client.client_cnt}")
        
    def __del__(self):
        Client.client_cnt -= 1

client1 = Client(1, "홍길동", 20, "남성", 1200)
client2 = Client(2, "김순자", 21, "여성", 300)
client3 = Client(3, "임꺽정", 23, "남성", 700)

client1.show()
client2.show()
client3.show()
print(f"[결과] 현재 총 고객 수: {Client.client_cnt}")
  • 클래스의 **상속(inheritance)**은 체계적인 프로그램 개발을 위해 필요하다.
  • 예를 들어 학교 관리 프로그램에서는 선생님(teacher)과 학생(student)에 대한 정보가 모두 활용된다.
    • 이들은 공통적으로 이름(name), 나이(age) 등의 정보를 가지고 있다.
    • 또한, 인적사항 정보를 출력하는 메서드를 둘 다 사용한다.
  • 상속을 사용하여, 공통적으로 사용되는 변수를 매번 선언하지 않는다.
class Human:
    def __init__(self, name, age):
        self.name = name
        self.age = age

    def show_human(self):
        print("===== 인적 사항 =====")
        print(f"이름: {self.name}")
        print(f"나이: {self.age}")
  • 교사 클래스가 사람 클래스에 대한 정보를 상속 받기 위해서는 상속을 진행해야 한다.
  • 기본적인 형식은 바로 다음과 같다.
class 자식 클래스 이름(부모 클래스 이름):
    pass


  • **super()**는 부모 클래스의 속성 및 메서드를 가져와야 할 때 사용할 수 있다.
  • super.init() 메서드를 호출하면, 이것은 부모 클래스에서 정의되어 있던 생성자를 사용한다는 의미다.
class Teacher(Human):
    def __init__(self, name, age, teacher_id, subject, salary):
        super().__init__(name, age)
        self.teacher_id = teacher_id
        self.subject = subject
        self.salary = salary

    def show_teacher(self):
        print("===== 교직원 카드 =====")
        print(f"교직원 번호: {self.teacher_id}")
        print(f"담당 과목: {self.subject}")
        print(f"월급: {self.salary}")

teacher = Teacher("김순자", 40, 1, "사회", 450)
teacher.show_human()
teacher.show_teacher()
class Student(Human):
    def __init__(self, name, age, student_id, grade, score):
        super().__init__(name, age)
        self.student_id = student_id
        self.grade = grade
        self.score = score

    def show_student(self):
        print("===== 학생 카드 =====")
        print(f"학생 번호: {self.student_id}")
        print(f"학년: {self.grade}")
        print(f"점수: {self.score}")

student = Student("홍길동", 18, 1, 2, 95)
student.show_human()
student.show_student()

 

'AI > python' 카테고리의 다른 글

Series 51~130 문제 연습  (2) 2024.10.25
numpy 1~50 문제 연습  (0) 2024.10.24