클래스(Classes)

클래스의 이름은 함수나 변수의 이름과는 다르게 첫글자를 대문자로 시작한다.

self는 __init__ 생성자 함수를 만들 때 필요한 첫 번째 파라미터이다. self를 넣지 않으면 예기치 못한 오류를 발생시킬 수 있다.

# 클래스 (Classes)

class Student:

    def __init__(self, name, major, is_graduated):
        self.name = name
        self.major = major
        self.is_graduated = is_graduated

    def study(self):
        print(f'{self.name} 학생은 공부 중입니다.')

# 인스턴스

student_1 = Student('김사람', 'ㅇㅇ과', False)

student_1_name = student_1.name
print(student_1_name)

student_1.study()

인스턴스화 된 student_1을 바로 print로 출력하면 지정된 주소값이 나온다. 저장된 값을 불러오기 위해서는 변수를 만들어 넣어주어야한다.study 함수에는 이미 출력 함수가 들어있기 때문에 따로 print에 넣어주지 않아도 출력된다.

 

정보를 수정하는 방법에 대해 알아보자.

class Student:

    def __init__(self, name, major):
        self.name = name
        self.major = major
        self.is_graduated = False

    def study(self):
        print(f'{self.name} 학생은 공부 중입니다.')

# 인스턴스

student_1 = Student('김사람', 'ㅇㅇ과')

student_1.major = 'ㅁㅁ과'
print(student_1.major)

위처럼 직접적으로 정보를 수정할 수 있다. 그러나 이 방법은 보안 부분에서 좋지 않은 방법이다.

 

함수를 구성하여 인스턴스의 속성을 바꾸는 것이 바람직하다.

class Student:

    def __init__(self, name, major):
        self.name = name
        self.major = major
        self.is_graduated = False

    def study(self):
        print(f'{self.name} 학생은 공부 중입니다.')

    def edit_major(self, new_major):
        student_1.major = new_major
        print(f'{student_1.major}로 전공이 변경되었습니다.')

# 인스턴스

student_1 = Student('김사람', 'ㅁㅁ과')

student_1.edit_major('ㅁㅁ과')
print(student_1.major)

 

 

상속(Inheritance)

기존에 사용하던 클래스의 공통적인 속성을 가져와 사용할 수 있다.

class Student:

    def __init__(self, name, major):
        self.name = name
        self.major = major
        self.is_graduated = False

    def study(self):
        print(f'{self.name} 학생은 공부 중입니다.')

# 인스턴스

student_1 = Student('김사람', 'ㅇㅇ과')

student_1.major = 'ㅁㅁ과'
print(student_1.major)

# 상속
class ForeignStudent(Student):

    def __init__(self, name, major, country):
        super().__init__(name, major)
        self.country = country

foreign_stud_1 = ForeignStudent('박사람', '도예학과', '미국')
print(foreign_stud_1.name)
print(foreign_stud_1.major)
print(foreign_stud_1.country)
print(foreign_stud_1.is_graduated)

 

부모 클래스에서 정의된 함수를 자식 클래스에서 덮어 쓰는 것을 오버라이딩이라고 한다.

class Student:

    def __init__(self, name, major):
        self.name = name
        self.major = major
        self.is_graduated = False

    def study(self):
        print(f'{self.name} 학생은 공부 중입니다.')

# 인스턴스

student_1 = Student('김사람', 'ㅇㅇ과')

student_1.major = 'ㅁㅁ과'
print(student_1.major)

# 상속
class ForeignStudent(Student):

    def __init__(self, name, major, country):
        super().__init__(name, major)
        self.country = country
        
    # 오버라이딩
    def study(self):
        print(f'{self.name} is studing now.')

foreign_stud_1 = ForeignStudent('박사람', '도예학과', '미국')

foreign_stud_1.study()

 

만든 클래스를 모듈에서 함수를 불러왔던 것처럼 활용할 수 있다.

# from classes import Student, ForeignStudent
from classes import * # 모든 함수

stud_1 = Student('김사람', 'ㅁㅁ과')
foreign_stud_1 = ForeignStudent('박사람', '도예학과', '미국')

stud_1.study()
foreign_stud_1.study()

 

 

'Back-End > Python' 카테고리의 다른 글

예외 처리와 파일 다루기  (0) 2023.08.10
회원가입 프로그램 실습 - 파이썬(Python) 편  (0) 2023.08.08
함수  (0) 2023.08.07
자료구조 - 리스트 / 튜플 / 딕셔너리  (0) 2023.07.27
조건문과 반복문  (0) 2023.07.20

+ Recent posts