Python

Python : class

코딩딩코 2022. 2. 15.

클래스(반)
공통 요소가 모여 있는 곳

1. 주어입니다.
한국어 : 원숭이가 바나나를 먹는다.
영어 : Monkey eats banana
파이썬 : Monkey.eat("바나나")
             주어   동사   목적어
클래스는 문장의 맨 앞에 등장하므로
앞글자를 대문자로 작성합니다.

2. 타입입니다.
공통요소가 있는 것들을 여러 개 선언하면
비효율적이기 때문에, 클래스에 한 번씩 만
선언하고 해당 필드를 가져다 씁니다.
대신 해당 필드에 접근하기 위해서는
그 클래스의 타입으로 선언되어야 합니다.

클래스 선언
class 클래스명:
필드(객체, 메소드)


객체(instance variable)
클래스는 추상적인 개념이고 이 추상적인 개념을
실체화(구체화)시켜야지만 사용할 수 있습니다.
따라서 추상적인 개념을 실체화(구체화)시켜놓은 것을 객체라고 합니다.
ex)
[클래스]  [객체]
자동차    엄마차
도형       세모

객체화(instance)
추상적인 개념을 구체화 시키는 작업
객체명 = 클래스명()

생성자
클래스명()을 생성자라고 하며, 이름 뒤에 소괄호가 있기 때문에
메소드의 기능과 똑같습니다. 하지만 리턴이 없기 때문에 메소드라고
부르지 않고 생성자라고 부릅니다.
앞글자가 대문자면 생성자, 아니면 메소드로 판단.
클래스에 있는 필드를 메모리에 할당해 주고 그 필드의 주소값을
가지고 돌아 와야 하기 때문에, 개발자가 직접 리턴값을 작성하면 안됩니다.

생성자의 역할
1. 해당 필드를 메모리(RAM)에 할당하고 할당된 필드의 주소값을 가져옵니다.

2. 초기화

 

 

클래스 A를 선언하고

data에 10을 대입시킵니다.

self를 붙이는 이유는 어떤 객체가 왔는지 모르기때문에 주소를 전달함으로써 누군지를 알려야 합니다.

예) A과 와서 data값을 부르는지 B가 와서 data값을 부르는지 모르기때문에 주소를 보내줘야 합니다.

def printData(self) self로 주소를 받음

print(self)       객체주소 출력

print(self.data)  주소로 누군지 알려주고 그 객체에 할당된 data값 출력

 

obj1은 data 를 20으로 하고

printData를 해보니 20으로 바뀌고

obj2는 아무것도 안 했기 때문에 바뀌지 않았습니다.

 

그리고 객체마다 주소가 다른 것도 확인 할 수 있습니다.

 

self를 붙이지 않는다면 클래스로 접근한 것입니다.

그러므로 클래스명인 A.intro() 로 def intro() 에 접근한 것입니다.

 

이번에는 자동차를 여러개 만들고 사용 할려고 하기 때문에 class Car를 선언합니다.

우선 momCar = Car("Benz", "Yellow", 35000) 이게 무엇을 의미 하는지

위에 사진을 보면 def __init__(self, brand, color, price) 가 있는데

여기에 순서대로 넣은 것 입니다.

그 안에서 self.brand = brand로 초기화 함으로서

momCar.brand = Benz 로 된 것 입니다.

즉 brand 에는 Benz 를 전달 받은 것이고,

color 에는 Yellow

price 에는 35000 을 전달 받았습니다.

그런데 brand = "" color = "" price = 0 으로 되어있는데

이것은 만약에 전달받은게 없다면 "" 또는 0으로 초기화를 하겠다는 겁니다.

myCar도 만들었는데  myCar = Car() 처럼 안에 아무것도 전달하는 값이 없기 때문에

myCar는 전부 brand = "" color = "" price = 0 이렇게 초기화가 되는 것입니다.

이제 밑에서 momCar.engineStart() 메소드를 호출하면 self.brand 즉 mom.brand는 Benz로 초기화 했기에

Benz시동 킴 이라는 문자열이 출력 되는 것입니다.

 

똑같습니다.

사과 1000 spring low 를 전달하고 바로바로 전달받은 값으로 초기화를 해주고

info라는 메소드로 그 정보들을 출력한것입니다.

'Python' 카테고리의 다른 글

Python : class 상속2  (0) 2022.02.17
Python : class 상속  (0) 2022.02.17
Python : 함수의 여러가지 예제 2  (0) 2022.02.15
Python : 함수의 여러가지 예제  (0) 2022.02.15
Python : 함수와 메소드  (0) 2022.02.15

댓글