파이썬 중급_(클래스)

TaeHwi Kang·2022년 9월 15일
0

1. 객체지향 프로그래밍

  • 객체(Object) = 속성(Attribute) + 기능(Function)
  • 객체는 클래스에서 생성된다
  • 객체를 사용하면 코드 재사용, 모듈화에 좋다는 장점이 있다.

2. 클래스

#클래스 생성
class NewGecerationPc:
    def __init__(self, name, cpu, memory, ssd):
        self.name = name
        self.cpu = cpu
        self.memory = memory
        self.ssd = ssd

#객체생성
myPc = NewGecerationPc('mypc', 'i5', '16G' ,'256G')

#객체 속성은 변경할 수 있다
myPc.cpu = 'i9'
myPc.memory = '64G'
myPc.ssd= '1T'

3. 객체와 메모리

  • 변수는 객체의 메모리 주소를 저장하고 이를 이용해서 객체를 참조
    1) 얕은 복사 : 객체 주소를 복사하는 것으로 객체 자체가 복사되지 않는다.
#얕은 복사
scores = [10,9,8,7,6,5,4]
scoresCopy = []

scoresCopy = scores

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

#깊은복사 다양한 방법
scores = [10,9,8,7,6,5,4]
scoresCopy = []

for s in scores:
    scoresCopy.append(s)

.extend(scores)

scoresCopy = scores.copy()

scoresCopy = scores[:]

4. 클래스 상속

  • 클래스는 또 다른 클래스를 상속해서 내 것처럼 사용할 수 있다.
class NomalCar:
	def drive(self):
		print('[NomalCar] drivr()')

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

class TurboCar(NomalCar):

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

5. 생성자

  • 객체가 생성될 때 생성자를 호출하면 init()가 자동 호출된다
  • init()가 속성을 초기화 한다
  • 상위 클래스의 속성을 초기화하기 위해서 super()를 이용한다
class P_class:
    def __init__(self,pNum1,pNum2):
        print('P_class실행')
        self.pNum1 = pNum1
        self.pNum2 = pNum2

class C_class(P_class):
    def __init__(self, cNum1, cNum2):
        print('C_class실행')

        #P_Cclass.__init__(self,cNum1,cNum2)
        super().__init__(cNum1,cNum2)

        self.cNum1 = cNum1
        self.cNum2 = cNum2

6. 다중상속

  • 2개 이상의 클래스를 상속
class Car01:

    def drive(self):
        print("go")

class Car02:

    def turbo(self):
        print("turbo")

class Car03:

    def fly(self):
        print('fly')

class Car(Car01,Car02,Car03):
    def __init__(self):
        pass

7. 오버라이딩

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

    def __init__(self,w,h):
        self.width = w
        self.height = h

    def printTriangleAreaInfo(self):
        print(f'self.width : {self.width}')
        print(f'self.height : {self.height}')

    def getArea(self):
        return self.width *self.height / 2

class NewTriangleArea(TriangleArea):
    
    def __init__(self,w,h):
        super().__init__(w,h)

    def getArea(self):
        return str(super().getArea()) + 'cm^2'

8. 추상클래스

  • 상위 클래스에서 하위 클래스에 메서드 구현을 강요한다
from abc import ABCMeta
from abc import abstractmethod

class AirPlane(metaclass=ABCMeta):

#@abstractmethod 사용한다
    @abstractmethod 
    def flight(self):
        pass

    def forward(self):
        print('go')

    def backward(self):
        print('back')

class Airliner(AirPlane):

    def __init__(self,c):
        self.color = c

    def flight(self):
        print('시속 400')
profile
스터디 노트

0개의 댓글