
< 참고: 예시 >
클래스에서 새로운 객체를 만들때 매서드는 파이썬에 의해 자동 호출 매서드에서 클래스를 어떻게 구성할지 정할수있음 (어떤 속성을 가지게 될지 인수를 받을 수있음
속성 및 매서드를 지칭하는 방법: this self
클래스는 class키워드와 속성(변수) + 기능(함수)를 이용하여 만듦
객체는 클래스의 생성자를 호출함. (생산자를 호출해서 객체를 생성)
class NewGenerationPC:
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 = NewGenerationPC('myPc','i5','16G','256G')
myPC.printPCInfo()
friendPC = NewGenerationPC('friendPC','i7','16G','256G')
friendPC.printPCInfo()
myPC.cpu = 'i9'
myPC.memory = '64G'
myPC.ssd = '1T'
myPC.printPCInfo()
[실습예제]
#국어,영어,수학 점수를 입력받아 리스트 저장하고 원본을 유지한 상태로 복사본을 만들어 과목별 점수를 10% 올렸을 경우
scores = [int(input('국어점수')),int(input('수학점수')),int(input('영어점수'))]
print(scores)
copyScores = scores.copy()
for idx,score in enumerate(copyScores):
result = score * 1.1
copyScores[idx] = 100 if result > 100 else result
print(f'이전평균: {sum(scores) /len(scores)}')
print(f'이후평균: {sum(copyScores) / len(copyScores)}')

class TemCls:
def __init__(self,n,s):
self.number = n
self.str = s
def printClsInfo(self):
print(f'self.number: {self.number}')
print(f'self.str: {self.str}')
#얕은 복사(객체 그대로 메모리 주소만 변경)
tc1 = TemCls(10,'hello')
tc2 = tc1
tc1.printClsInfo()
tc2.printClsInfo() #출력값 동일
tc2.number = 3.14
tc2.str = 'bye'
tc1.printClsInfo()
tc2.printClsInfo() #tc2만 변경해도 tc1도 자동으로 변경

#깊은 복사
import copy
tc1 = TemCls(10,'hello')
tc2 = copy.copy(tc1)
tc1.printClsInfo()
tc2.printClsInfo() #출력값 동일
tc2.number = 3.14
tc2.str = 'bye'
tc1.printClsInfo()
tc2.printClsInfo() #tc2만 변경(새로운객체가 만들어짐)
# 깊은 복사하는 여러 방법
import copy
scores = [10,6,7,5,4]
scoresCopy = []
#방법1
for s in scores :
scoresCopy.append(s)
print(f'id(scores): {id(scores)}')
print(f'id(scoresCopy): {id(scoresCopy)}')
#방법2
scoresCopy.extend(scores)
print(f'id(scores): {id(scores)}')
print(f'id(scoresCopy): {id(scoresCopy)}')
#방법3
scoresCopy = scores.copy()
print(f'id(scores): {id(scores)}')
print(f'id(scoresCopy): {id(scoresCopy)}')
#방법4
scoresCopy = scores[:]
print(f'id(scores): {id(scores)}')
print(f'id(scoresCopy): {id(scoresCopy)}')
[실습]
# 선수의 원본 점수를 이용해서 평균을 출력하고 최고값 최저값을 제외한 평균을 출력하는 프로그램
playerSco = [8.7,9.1,8.9,9.0,7.9,9.5,8.8,8.3]
playerSco2 = playerSco.copy() #얕은 카피
playerSco.sort()
playerSco2.sort()
playerSco2.pop(0) #최솟값 지움
playerSco2.pop( ) #최댓값 지움
print(f'playerSco: {playerSco}')
print(f'playesSco2: {playerSco2}')
ScoTot = round(sum(playerSco),2)
ScoMod = round((ScoTot / len(playerSco)),2)
print(f'오리지널 점수합: {ScoTot}')
print(f'오리지널 평균: {ScoMod}')
Sco2Tot = round(sum(playerSco2),2)
Sco2Mod = round((Sco2Tot/len(playerSco2)),2)
print(f'오리지널 점수합: {Sco2Tot}')
print(f'오리지널 평균: {Sco2Mod}')
print(f'ScoMod - Sco2Mod: {ScoMod - Sco2Mod}')