본문 바로가기
언어/Python

[유튜브 나도코딩 1분파이썬] 100분완성 강의 요약본 #47강~51강

by 바다의 공간 2024. 5. 17.

[47강. with ]

파일을 열면open(...) 항상 닫아줘야close()합니다. 그렇지만 파일작업을 하다보면 파일 닫는걸 깜빡할 수 있습니다.

파일을 닫는걸 자동으로 해주는것이 바로 with입니다.

with를 사용하게 되면 with 블럭을 벗어나면 자동으로 파일을 닫아줘서 close함수를 따로 호출 할 필요가 없습니다.

 

사용방법

with 파일 쓰기

f = open('list.txt', 'w', encoding='utf8')

with open( 'list.txt', 'w', encoding='utf8') as f: 

한 칸 띄우고 open 구문은 그대로 적어주고요 맨 뒤에 open을 통해서 연 파일을 담을 as f: 라는 변수를 지정해줍니다.

마치 위 문장에서 open한 결과를 f로 받는것과 똑같은겁니다.

 

이 다음은 들여쓰리를 한 뒤에

f = open('list.txt', 'w', encoding='utf8') 

 with open( 'list.txt', 'w', encoding='utf8') as f: 

   f.write('김xx\n') .

   f.write('정xx\n')

   f.write('허xx\n') 

   f.close() #파일 닫기  with를 구문을 빠져나갈때는 자동으로 파일이 닫힙니다.

 

with 파일 읽기

f = open('list.txt', 'r', encoding='utf8') 

with open('list.txt','r', encoding='utf8') as f:

        contents = f.read()

        print(contents)

        f.close()  자동으로 파일이 닫힘

 

파일 입출력을 할때에는 가급적 with구문을 사용하는 습관을 들이시는게 좋습니다.

 

[48강. 클래스 ]

블랙박스를 하나 만들때 들어가는 정보를 입력해봅니다.

name = '까망이'

resolution = 'FHD'

price = 200000

color = 'black'

그런데 두번째 블랙박스를 만들려면 어떻게 해야할까요?

name2 = '까망이2'

resolution2 = 'FHD'

price2 = 200000

color2 = 'black'

등등등 이렇게 만들면 여러개가 생겨나게 되겠죠?

이보다 더 편하게 효율적으로 관리하려면 딕셔너리도 유용할수있습니다.

그러나 예를들어

이 블랙박스가 운전을 하다가 어떤 충격을 받았을때 충격을 감지해서 별도의 event 폴더로 관리하는 기능이 있다면

이런건 변수만 가지고 하기 힘든 함수의영역이죠? 딕셔너리가지고는 무리가 있을 수 있어요.

이럴때 사용하는것이 클래스입니다.

(1)클래스는 여러변수들을 묶어서 한 번에 관리할 수있습니다.

(2)클래스 안에 어떤 기능을 한 함수와 같은걸 만들어서 동작도록 할 수도 있습니다.

 

클래스의 개념

설명서+설계도를 합친 개념이라고 이해할 수 있습니다.

설명서를 따라서 정보를 확인할 수 있고 설계도를 통해서 어떻게 동작하는지 만들수도 있어요.

설계도는 하나만 가지고 있어도 여러개를 만들 수 있습니다.

 

이처럼 클래스는 한 번만 정의를 해두면 그 클래스를 가지고 얼마든지 많은 제품을 만들 수 있는데

이 제품들을 object 우리말로는 '객체'라고 합니다.

그리고 그 객체는 이 클래스의 인스턴스 라고 합니다.

[49강. 클래스 정의 ]

클래스는 위에서 언급했듯이 여러 변수들을 포함할수있고 기능도 정의 할 수 있습니다.

클래스 정의하는방법

class 클래스명:

    정의

 

 #클래스명은 대문자로 시작하는 조합으로 만들면됨. Black과 Box라는 두 단어를 합쳤기에 대문자로 썼습니다.

  class BlackBox:  

      pass

#pass는 구현해야하는 부분을 잠시 미뤄두기 위해서 사용합니다.

 

클래스 객체만드는 방법

class BlackBox:

    pass

 

b1 = BlackBox() #b1객체 생성완료

b1.name = '까망이' #변수선언

print(b1.name) 

>> 출력 '까망이'

 

b1객체가 BlackBox의 인스턴스가 맞는지 확인하는방법?

>> isinstance를 사용한다.

print(isinstance(b1, BlackBox)) #객체인b1, 클래스인 BlackBox를 넣어주면됨

>>결과가 True면 맞다는것

 

#변수를 선언하듯이 객체 이름을 b1으로 정의하고 등호를 넣고클래스명을 적고 괄호를 쓰면됨 

 

[50. _ _init_ _]

__init__란?

클래스의 인스턴스를 초기화하기 위해 사용되는 메서드로, 객체가 생성될 때 자동으로 호출됩니다.

 


class BlackBox:

    pass

 

b1 = BlackBox() 

b1.name = '까망이' 

 

b2 = BlackBox()

print(b2.name)

>> Error발생

이유는 ? b1객체에는 name이라는 변수를 만들어줬지만 b2객체에는 name을 정의해주지않았기에

에러가 발생합니다.

 

클래스는 설계도와 설명서를 합친 개념이라고 했습니다.

지금 여기 설계도는 아무것도 없는 비어있는 설계도입니다.

설계도의 내용을 채우기 위해서 아래와 같이 합니다.

class BlackBox:

    def __init__(self, name, price):  

         self.name = name

         self.price = price

#여기서 self는 그냥일단 넣어줍니다. #괄호속에 우리가 만들 제품에 필요한 변수를 적어주면 됩니다.

#이렇게 만들어진 설계도(클래스)를 이용해서 객체를 만드려면 아래처럼 합니다.

b1 = BlackBox('까망이',200000) #괄호안에 이름과 가격을 순서대로 넣어주면 됩니다.

print(b1.name, b1.price)

>>실행결과: 까망이 200000

 

b2 = BlackBox('하양이', 100000)

print(b2.name, b2.price)

>>실행결과: 하양이 100000

 

[51.  멤버변수]

class BlackBox:

    def __init__(self, name, price):  

         self.name = name

         self.price = price

name과 price는 멤버변수 라고 합니다.

만약 여기서 b1객체에서 멤버변수가 하나 더 필요하다고 한다면