💬 오늘의 공부시간 AM03:00 ~AM 6:30

다들 감기 조심하세요. 진짜 요즘 감기는 낫기가 어렵네 ㅠㅠ
미친 기침감기.. 몸살로 오는 것 같아 힘드네 ㅠ

🔥 2주차 todo 리스트 (5/8~5/14)

파이썬 기초문풀4
파이썬 기초문풀5
파이썬 중급1
파이썬 중급2
파이썬 중급3
파이썬 중급4
파이썬 중급5~6
객체와 메모리
얕은 복사와 깊은 복사
클래스상속
생성자(01)
생성자(02)
다중 상속
오버라이딩
추상클래스
예외란?


파이썬 중급7
파이썬 중급8~9
파이썬 중급문풀1~2
파이썬 중급문풀3
파이썬 중급문풀4


📝 weekly 데이터 사이언스 스쿨 퀴즈
📝 재복습weekly 데이터 사이언스 스쿨 퀴즈

💻 핵심 내용 정리

📝 얕은복사와 깊은복사

얕은복사
객체주소를 복사하는 것으로 객체 자체가 복사되지 않는다.

  • 객체 주소만 복사 (객체는 하나)
  • 출력값이 같다.

깊은 복사
객체자체를 복사하는 것으로 또 하나의 객체가 만들어 진다.

  • 객체 자체를 복사 (객체가 둘)
  • 출력값이 다르다.

예시

class TemCls:
    def __inti__ (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()

#깊은 복사
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()

예시

# 리스트를 이용한 복사
import copy

scores = [9, 8, 5, 7, 6, 10]
scoresCopy = []

scoresCopy = scores  # 얕은 복사
print(f'id(scores): {id(scores)}')
print(f'id(scoresCopy): {id(scoresCopy)}')

for s in scores:   #깊은 복사 _ 값은 똑같지만 개체값이 다르다
    scoresCopy.append(s)

print(f'id(scores): {id(scores)}')
print(f'id(scoresCopy): {id(scoresCopy)}')

scoresCopy.extend(scores)     #깊은 복사
print(f'id(scores): {id(scores)}')
print(f'id(scoresCopy): {id(scoresCopy)}')

scoresCopy = scores.copy()   # 깊은 복사
print(f'id(scores): {id(scores)}')
print(f'id(scoresCopy): {id(scoresCopy)}')

scoresCopy = scores[:]      # 깊은복사 _슬라이싱
print(f'id(scores): {id(scores)}')
print(f'id(scoresCopy): {id(scoresCopy)}')

실습_01

📝 상속이란?

  • 클래스는 또 다른 클래스를 상속해서 내 것처럼 사용할수 있다.

class1 → (class1) + class2 → (class1 + class2) + class3

  • 상위 클래스로 갈수록 이전 클래스는 상속되어진다

예시

class NormalCar:

    def drive(self):
        print('[NomalCar] drive() called!!')

    def back(self):
        print('[NomalCar] back() called!!')

class  TurboCar(NormalCar):

    def turbo(self):
        print('[TurboCar] turbo() called!!')

myTurboCar = TurboCar()

myTurboCar.turbo()
myTurboCar.drive()
myTurboCar.back()

실습_02

뎃셈, 뺄셈 기능이 있는 클래스를 만들고,, 이를 상속하는 클래스를 만들어서 곱세과 나눗 기능을 추가해보자.

class CalculatorSuper:

    def add(self, n1 , n2):
        return n1 + n2

    def sub(self, n1, n2):
        return n1 - n2

class CalculatorChild(CalculatorSuper):

    def mul(self, n1 , n2):
        return n1 * n2

    def div(self, n1, n2):
        return n1 / n2

myCalculator = CalculatorChild()

print(myCalculator.add(10, 20))
print(myCalculator.sub(10, 20))
print(myCalculator.mul(10, 20))
print(myCalculator.div(10, 20))

📝 생성자

  • 객체가 생성될 때 생성자를 호출하면 __init__() 가 자동 호출된다.
  • __init__() 가 속성을 초기화 한다.
  • 상위클래스의 속성을 초기화 하기 위해서 super()를 이용한다.
    class.__init__()(self) 강제적으로 출력해서 상위 클래스의 속성를 초기화 할수 있다.

예시_01

class Calculator:

    def __init__(self):
        print('[Calculator] __init__() called!!')

cal = Calculator()

예시_02

class Calculator:

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

cal = Calculator(10, 20)
print(f'cal.num1: {cal.num1}')
print(f'cal.num2: {cal.num2}')

📝 다중상속

  • 2개 이상의 클래스를 상속한다.

📝 오버라이딩

  • 하위클래스에서 상위 클래스의 메서드를 재정의(override) 한다.

📝 추상클래스

  • 상위 클래스에서 하위 클래스에 메서드 구현을 강요한다.

💡 오늘을 마무리하면서 ...

너무 힘들어서 어떻게 했는지 모르겠다.
약을 먹음 약을 먹어서 헤롱헤롱~
퇴근하고 와서 어떻게 잤는지 기억이 안나고 일찍 일어나서 공부한것도 진짜 놀라움
깊은복사 한번 복습해야지..
스터디노트도 마물하고 공개처리 해야지,, 할고많으당.


😃 Busy Study _ 새벽반 PM 10:00 ~ AM 2:30

여러분 화이팅!! 우리 모두 다 잘 될거예요!

profile
늦깎이 DA/DS 취준생, 이곳은 스터디노트 겸 성장기록장(소통환영이요💜)

0개의 댓글