[Python] 중급5. 클래스와 객체

HyunJin·2024년 5월 29일

✍ 클래스

  • 클래스는 class 키워드와 속성(변수) 그리고 기능(함수)를 이용해서 만듦
class Car:  # 클래스 선언

    def __init__(self, col, len): # 생성자, 속성
        self.color = col
        self.length = len

    def doStop(self): # 기능1: Car 라는 클래스 안에 doStop이라는 기능
        print ('Stop')

    def doStart(self):  # 기능2: Car 라는 클래스 안에 dostart라는 기능
            print('Start')

    def printCarInfo(self):  # 기능3: Car 라는 클래스 안에 printCarInfo라는 기능
        print(f'self.color:{self.color}')
        print(f'self.length:{self.length}')

car1 = Car('red', 200)
car2 = Car('blue', 300)

car1.printCarInfo()
# self.color:red
# self.length:200

car2.printCarInfo()
# self.color:blue
# self.length:300

car1.doStop()
# Stop

car1.doStart()
# Start

✔ 실습

  • 비행기 클래스를 만들고 비행기 객체 3개를 생성하기
class AirPlane:

    def __init__(self, color, length, weight):
        self.color = color
        self.length = length
        self.weight = weight

    def takeOff(self):
        print('take-off')

    def landing(self):
        print('landing')

    def printAriPlaneInfo(self):
        print(f'color: {self.color}')
        print(f'length: {self.length}')
        print(f'weight: {self.weight}')

airPlane1 = AirPlane('red', 200, 2000)
airPlane2 = AirPlane('blue', 150, 2200)
airPlane3 = AirPlane('green', 180, 2100)
airPlane4 = AirPlane('white', 220, 1900)
airPlane5 = AirPlane('black', 210, 2300)

airPlane1.printAriPlaneInfo()
# color: red
# length: 200
# weight: 2000

airPlane2.printAriPlaneInfo()
# color: blue
# length: 150
# weight: 2200

✍ 생성자

  • 객체가 생성될 때 생성자를 호출하면 __init__()가 자동호출

  • __init__() 속성을 초기화

# 방법1

class Calculator:

    def __init__(self,n1,n2):
        print('[Calculator] __init__() called!!')
        self.num1 = n1
        self.num2 = n2

cal= Calculator(10, 20) # 생성자 호출
## [Calculator] __init__() called!!

print(f'cal.num1:{cal.num1}')
## cal.num1:10
print(f'cal.num2:{cal.num2}')
## cal.num2:20
# 방법2

class Calculator:

    def __init__(self):
        print('[Calculator] __init__() called!!')
        self.num1 = 10
        self.num2 = 100


cal= Calculator()
## [Calculator] __init__() called!!

print(f'cal.num1:{cal.num1}')
## cal.num1:10

print(f'cal.num2:{cal.num2}')
## cal.num2:100
  • 상위 클래스의 속성을 초기화
class P_Class:

    def __init__(self,pNum1, pNum2):
        print('[pClass]__init__()')

        self.pNum1=pNum1
        self.pNum2=pNum2


class C_Class(P_Class):

    def __init__(self, cNum1, cNum2):
        print('[cClass]__init__()')
        super().__init__(100,200) #상위 클래스의 속성을 초기화 하기 위해서 super() 사용

        self.cNum1=cNum1
        self.cNum1=cNum1

cls=C_Class(10,2)
## [cClass]__init__()
## [pClass]__init__()

✔ 실습

  • 중간고사 클래스와 기말고사 클래스를 상속관계로 만들고, 각각의 점수를 초기화
  • 총점 및 평균을 반환하는 기능도 만들기
class MidExam:

    def __init__(self,s1,s2,s3):
        print('[MidExam]__init__()')

        self.mid_kor_score=s1
        self.mid_eng_score=s2
        self.mid_mat_score=s3

    def printScores(self):
        print(f'mid_kor_score:{self.mid_kor_score}')
        print(f'mid_eng_score:{self.mid_eng_score}')
        print(f'mid_mat_score:{self.mid_mat_score}')

class EndExam(MidExam):

    def __init__(self,s1,s2,s3,s4,s5,s6):
        print('[EndExam] __init__()')

        super().__init__(s1,s2,s3) #중간고사 점수

        self.end_kor_score = s4
        self.end_eng_score = s5
        self.end_mat_score = s6

    def printScores(self):
        super().printScores() # 중간고사 점수 출력
        print(f'end_kor_score:{self.end_kor_score}')
        print(f'end_eng_score:{self.end_eng_score}')
        print(f'end_mat_score:{self.end_mat_score}')

    def totalScore(self):
        total=self.mid_kor_score + self.mid_eng_score + self.mid_mat_score
        total += self.end_kor_score + self.end_eng_score + self.end_mat_score

        return total

    def aveScore(self):
        return self.totalScore () / 6

exam = EndExam(80,90,88,75,85,95)
## [EndExam] __init__()
## [MidExam]__init__()

exam.printScores()
## mid_kor_score:80
## mid_eng_score:90
## mid_mat_score:88
## end_kor_score:75
## end_eng_score:85
## end_mat_score:95

print(f'total:{exam.totalScore()}')
## total:513

print(f'average:{round(exam.aveScore(),2)}')
## average:85.5

✍ 객체

객체란 무엇인가?

  • 객체는 속성과 기능으로 구성
  • 객체는 클래스에서 생성
  • 객체를 사용하면 코드 재사용 및 모듈화가 용이함

객체의 속성 변경

## 클래스 선언
class NewGenrationPC:

    def __init__(self,name,cpu, memory, ssd):
        self.name=name
        self.cpu=cpu
        self.memory=memory
        self.ssd=ssd

    def doExcel(self):
        print('EXCEL RUN')

    def doPhotoshop(self):
        print('Photoshop run!!')

    def printPCInfo(self):
        print(f'self.name:{self.name}')
        print(f'self.cpu:{self.cpu}')
        print(f'self.memory:{self.memory}')
        print(f'self.ssd:{self.ssd}')

## 객체 생성
myPC= NewGenrationPC('myPC','i5','16G','256G')
myPC.printPCInfo()
# self.name:myPC
# self.cpu:i5
# self.memory:16G
# self.ssd:256G

# 객체의 속성 변경
myPC.cpu= 'i9'
myPC.memory= '64G'
myPC.ssd= '1T'
myPC.printPCInfo() 
# self.name:myPC
# self.cpu:i9
# self.memory:64G
# self.ssd:1T

✔실습

  • 계산기 클래스를 만들고 사칙연산 실행
class Calculator:

    def __init__(self):
        self.n1 =0
        self.n2 =0
        self.result =0

    def add(self):
        self.result= self.n1+ self.n2
        return self.result

    def sub(self):
        self.result= self.n1- self.n2
        return self.result

    def mul(self):
        self.result= self.n1* self.n2
        return self.result

    def div(self):
        self.result= self.n1/ self.n2
        return self.result

calculator = Calculator()
calculator.n1 = 10
calculator.n2 = 20

print(f'calculator.add(): {calculator.add()}')
# calculator.add(): 30

print(f'calculator.sub(): {calculator.sub()}')
# calculator.sub(): -10

print(f'calculator.mul(): {calculator.mul()}')
# calculator.mul(): 200

print(f'calculator.div(): {calculator.div()}')
# calculator.div(): 0.5
profile
데이터 분석가 준비생

0개의 댓글