파이썬 중급3

InSung-Na·2023년 1월 9일
0
post-thumbnail

해당 글은 제로베이스데이터스쿨 학습자료를 참고하여 작성되었습니다

📌객체지향 프로그래밍

  • 객체는 속성과 기능으로 구성된다
  • 클래스(class)를 이용하여 객체를 생성할 수 있다

    (출처:제로베이스데이터스쿨)

📝입력

class Car:
    def __init__(self, col, len):
        self.color = col
        self.length = len

    def doStop(self):
        print("stop")

    def doStart(self):
        print("start")

    def printCarInfo(self):
        print('self.color : {}'.format(self.color))
        print('self.length : {}'.format(self.length))

car1 = Car('red', 200)

car2 = Car('blue', 300)

car1.printCarInfo()
car2.printCarInfo()

🧾출력

self.color : red
self.length : 200
self.color : blue
self.length : 300

📌객체속성변경

📝입력

print('개체 속성 변경 전')
car1 = Car('red', 200)
car1.printCarInfo()
print()
print('개체 속성 변경 후')
car1.color = 'green'
car1.printCarInfo()

🧾출력

개체 속성 변경 전
self.color : red
self.length : 200

개체 속성 변경 후
self.color : green
self.length : 200

📌얕은 복사와 깊은 복사

객체와 메모리

  • 변수는 객체의 메모리 주소를 저장하고 이를 이용해서 객체를 참조한다
    (출처:제로베이스데이터스쿨)

얕은 복사

  • 객체 주소를 복사하는 것으로 객체 자체가 복사되지 않는다.
    (출처:제로베이스데이터스쿨)

깊은 복사

  • 객체 자체를 복사하는 것으로 또 하나의 객체가 만들어진다.
    (출처:제로베이스데이터스쿨)

📝입력

print('위에서 만들어놓은 car 클래스를 사용한다')
car1 = Car("red", 200)
car1.printCarInfo()
print()

print('얕은 복사')
car2 = car1
car1.color = 'green'
car2.printCarInfo()
print()

print('깊은 복사')
import copy
car3 = copy.deepcopy(car1)
car1.color = 'blue'
car3.printCarInfo()
print()

print('얕은복사에서 car2는 car1에 의존하기 때문에 car1의 변경된 데이터를 모두 가져온다')
print('깊은복사에서 car3는 car1의 데이터만 가져온 독립된 개체이기 때문에 car1이 변경되어도 무관하다')

🧾출력

위에서 만들어놓은 car 클래스를 사용한다
self.color : red
self.length : 200

얕은 복사
self.color : green
self.length : 200

깊은 복사
self.color : green
self.length : 200

얕은복사에서 car2는 car1에 의존하기 때문에 car1의 변경된 데이터를 모두 가져온다
깊은복사에서 car3는 car1의 데이터만 가져온 독립된 개체이기 때문에 car1이 변경되어도 무관하다
  • 얕은복사에서 car2는 car1에 의존하기 때문에 car1의 변경된 데이터를 모두 가져온다
  • 깊은복사에서 car3는 car1의 데이터만 가져온 독립된 개체이기 때문에 car1이 변경되어도 무관하다

📌클래스 상속

  • 클래스는 또 다른 클래스를 상속해서 내 것처럼 사용할 수 있다.
    (출처:제로베이스데이터스쿨)

📝입력

class NormalCar:

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

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

class TurboCar(NormalCar):

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


myTurboCar = TurboCar()
myTurboCar.turbo()
myTurboCar.back()

🧾출력

[TurboCar] turbo() called!!
[NormalCar] back() called!!

📌클래스 생성자 __init()__

  • 객체가 생성될 때 생성자를 호출하면 init()가 자동 호출된다.
  • 이를 이용하여 클래스의 속성을 초기화한다.
    (출처:제로베이스데이터스쿨)

📌super()

  • 상위 클래스의 속성을 초기화하기 위해서 super()를 이용한다.
    (출처:제로베이스데이터스쿨)

📌클래스 다중상속

  • 클래스는 여러 클래스를 다중상속할 수 있다.

📝입력

class Car1:

    def drive(self):
        print('drive() method called!!')


class Car2:

    def turbo(self):
        print('turbo() method called!!')


class Car3:

    def fly(self):
        print('fly() method called!!')

class Car(Car1, Car2, Car3):

    def __init(self):
        pass

myCar = Car()
myCar.drive()
myCar.turbo()
myCar.fly()

🧾출력

drive() method called!!
turbo() method called!!
fly() method called!!

📌오버라이딩

  • 하위 클래스에서 상위 클래스의 메서드를 재정의(override)한다.
    (출처:제로베이스데이터스쿨)

📌추상클래스

  • 상위 클래스에서 하위 클래스에 메서드 구현을 강요한다.
    (출처:제로베이스데이터스쿨)

*abc(abstract base class)모듈 : 추상클래스 생성 모듈

0개의 댓글