[17-27]파이썬 중급(객체, 클래스)

이재은·2024년 5월 11일

17강.

1. 객체 지향 프로그래밍

1) 객체 = 속성 + 기능

  • 계산기 = 숫자 / 덧셈, 뺄셈 ...
  • 자동차 = 색상 / 길이, 가격 + 전진, 후진, 정지..

2) 객체 만들기(생성)
(1) 클래스에서 속성과 기능을 정의
(2) 객체 생성을 위한 생성자 호출 : 클래스(붕어빵틀)로부터 무한개의 객체(붕어빵) 생성가능

3) 객체 사용의 장점

  • 코드 재사용, 모듈화에 좋다(객체간 결합도가 낮음)

18강.

2. 클래스 생성 ★★★★★

  1. Class 키워드 + 속성(변수) + 기능(함수)
  2. 속성값 정의
    • self.color = > a**라는 속성을 정의함.
    • def __init__ (self, a, b) > a, b라는 매개변수로 속성값 초기화
  3. 클래스안의 특정한 기능은 매개변수로 self를 받는다
    • def dostop(self)

  1. 객체생성 : 클래스 이름과 동일한 생성자를 호출
    키워드() : '키워드' 클래스의 생성자를 호출 > init 매서드 호출
    키워드('속성을 초기화하는 매개변수') : 속성값 초기화

  2. 레퍼런스 변수 :
    car1 = Car('red', 200)
    car2 = Car('Blue', 300)
    객체를 변수에 담아서 기능에 접근 : car1.doStop()

19강.

3. 객체의 속성 변경

1) 기능에 접근 ★
myPC2.PrintPCinfo()

2) 속성에 접근 > 속성 변경하기 ★
myPC.cpu = 'i9'
myPC.memory = '64'
myPC.ssd = '1T'
myPC.PrintPCinfo()

4. 객체와 메모리

  1. 변수는 객체의 메모리 주소를 저장하고, 이를 이용해 객체를 참조한다(레퍼런스 변수)
    저장ㅇ 안됨...ㅠㅠㅠㅠㅠㅠㅠㅠㅠ

5. 객체의 깊은 복사, 얕은 복사

  1. 얕은 복사 : 객체 주소 복사, 객체 자체가 복사되지 않음
  2. 깊은 복사 : 객체 자체 복사, 또하나의 객체 생성

오답정리

최솟값 최대값 빼기 - 정렬 - 앞마지막 빼기
plaCopSco.sort()
plaCopSco.pop(0)
plaCopSco.pop()

22강.

6. 클래스 상속

상속시 상속한 클래스의 기능 모두 사용 가능

7. ★ 생성자(뭔말이야,,??)

  1. 객채가 생성될 때 생성자를 호출하면 init()가 자동 호출
  2. 생성자호출시 매개변수를 넣어주면 init의 속성 초기화
  3. super() : 상위 클래스의 속성 초기화

8. 다중상속(2개 이상의 클래스 상속)

많이 안하는걸 권장

9. 오버라이딩(재정의)

하위클래스에서 상위 클래스의 매서드를 재정의

27강.

10. 추상클래스

(하위클래스에게 상위클래스의) 매서드 구현을 강요하는 것.
해당 기능을 클래스에 알맞게 고쳐 쓰기 위해 추상클래스를 사용함.

★from abc import ABCMeta
★from abc import abstractmethod

class AirPlane(metaclass=ABCMeta):

    ★@abstractmethod
    def flight(self):
        pass
        
class Airliner(AirPlane):

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

    def flight(self):
        ★print('시속 400km/h 비행!!') 

ap1 = Airliner('red')
ap1.flight()
ap1.forward()
ap1.backward()

결과

#객.변!
#객.함!

class Blackbox :
	pass
   
b1 = Blackbox() #b1 객체 생성 / b1은 클래스 BlackBox의 인스턴스
b1.name = '까망이' #변수 선언 (b1이라는 객체에 name이라는 변수 선언)
print(isinstance(b1, BlackBox)) # True

class Blackbox :
	def __init__(self, name, price) : #init : 객체생성시 자동호출
    	self.name = name
        self.price = price
        
b1.BlackeBox('까망이', 10000) 
print(b1.name, b1.price) #까망이, 10000

b2.BlackeBox('소망이', 20000) 
print(b1.name, b1.price) #소망이, 20000


self 
1. 메소드를 정의할 때 처음 전달값은 반드시 self
2. 메소드 내에서는 self.name과 같은 형태로 멤버변수를 사용
profile
Dare to be an optimist

0개의 댓글