목록파이썬/윤성우의 열혈 파이썬 중급편 (23)
개발자 블로그
부모 클래스와 자식 클래스 부모 클래스, 상위 클래스, 슈퍼 클래스라고도 읽으며, 베이스가 되는 클래스이다. 자식 클래슥, 하위 클래스, 서브 클래스라고도 읽으며, 베이스가 되는 클래스를 상속받아 추가할 메소드를 업데이트한 클래스이다. 따라서, 자식 클래스는 부모클래스의 모든 메소드를 갖고온다. 또한 새로운 별도의 메소드를 추가할 수도 있다. *새로운 메소드를 추가하는 과정에서 같은 메소드(이름이 같은 메소드)가 중첩이 될 때, 오버라이딩(부모로 부터 가져온 메소드가 가려지는)이 일어날 수 있다. 이를 메소드 오버라이딩이라고 한다. 이러한 경우 말그대로 덮어씌어진것이기 때문에 해당하는 부모 메소드가 사라진 것은 아니다. 가려진 것 뿐! 이것은 super()라는 상속 클래스를 호출할 때 쓰는 메소드를 활용..
소프트웨어 공학 관점에서의 클래스와 객체는 이렇게 설명한다고 한다. 클래스 : 객체를 만들기 위한 일종의 설계도 (우리가 흔히 많이 듣는 붕어빵 틀) 객체 : 클래스를 기반으로 만들어진 실제 사물 (붕어빵) 클래스의 기본 정의 "클래스 내에 들어갈 변수(데이터)와 메소드(기능)를 결정하는 것" 객체 안에 변수가 만들어지는 시점 Simple 클래스는 메소드만 있는 클래스이다! 위 클래스 객체를 만들때 언제 변수가 생성이 되는가! 그림을 보면 s1.seti(200) 이라고 변수를 대상으로 대입 연산을 진행하는 순간에 객체의 변수가 만들어진다. 하지만, 먼저 geti라는 메소드를 호출하면 아래와 같은 오류를 만난다. 그러나 클래스를 정의할 때, 객체 생성시 자동으로 호출되는 __init__ 메소드를 다음과 같..
1. 자료형 분류 파이썬이 제공하는 다음과 같은 자료형들을 가리켜 '시퀀스 타입(sequence type)'이라 한다. 문자열의 경우 텍스트 시퀀스 타입이라 하는데, 이것도 뭐 시퀀스 타입의 일종이다. 리스트 list 클래스의 객체 튜플 tuple 클래스의 객체 레인지 range 클래스의 객체 문자열 str 클래스의 객체 이들에겐 저장된 값의 순서 정보(위치 정보)가 존재하다는 특징이 있다. 레인지의 경우에는 시작과 끝값의 범위를 저장하지만 시작과 끝이라는 순서가 존재한다. 여튼 저장된 값의 순서가 존재한다는 것이 시퀀스(연속적인)타입의 특징이다. 다음 두 연산은 시퀀스 타입의 특징을 기반으로 진행되는 연산이다. 인덱싱 연산 s[0], s[1], s[2] 특정하는 값 하나를 참조하는 연산 슬라이싱 연산 ..
우연치 않게 오늘 알고리즘 문제를 풀다가 딕셔너리로 접근하여 푸는 문제를 만났다. 그래서 더욱 반갑기도 했지만, 막상 문제에 적용하려 하니 잘 안되기도 했다. 역시 많이 접해보고 사용해봐야 익숙해질 것 같다. 그래서 따로 블로그를 통해 위 내용에 대해 더 자세하게 작성해보려한다! 1) 키가 존재할 때와 존재하지 않을 때 키가 존재할 때와 하지 않을 때, 대입의 연산(=)의 경우에는 예외 없이 잘 값의 수정 또는 생성으로 잘 이어진다. 하지만 문제는 참조(ex. +=)를 하고 싶을 때 일어난다. 예를 들어 해당 키가 존재하지 않는 상황에서 값을 참조하려고 할 때, 예외가 발생한다. 예시를 들어보자! 이러한 경우 if와 else로 키가 존재할 때와 존재하지 않을 때 구분하여 처리할 수 있다. 하지만 더 나은..
dict 다양한 생성 방법 위 코드를 보면 다양한 방법으로 딕셔너리를 생성할 수 있는 것을 확인할 수 있다. 원래 딕셔너리와 같은 성격의 저장소는 저장 순서를 보장하지 않았지만, 버전 3.7부터 파이썬은 저장순서를 보장하고 있다고 한다. d4의 경우 zip 함수를 사용하여 딕셔너리를 만들었는데, zip함수는 순차적으로 값을 뽑아 튜플 형태로 반환해주는 함수이다. 안에 들어가는 객체(리스트, 문자열, 튜플) iterable 객체가 들어가는 것을 볼 수 있다. 여튼 zip함수는 같은 위치에 있는 값들을 조합해서 튜플을 만들어 낸다. 그리고 셋 이상의 값들을 조합하는 것도 가능하다! 딕셔너리 루핑 테크닉 dict.keys() # 딕셔너리의 키들만 참조하고자 할 때 dict.values() # 딕셔너리의 값들만..
튜플의 패킹과 언패킹 튜플로 값을 묶는 행위를 가리켜 '튜플 패킹'이라 하고 반대로 튜플로 묶여 있는 값들을 풀어내는 행위를 '튜플 언패킹'이라 한다. 튜플 패킹 하나 이상의 값을 튜플로 묶는 행위 튜플 언패킹 튜플에 묶여 있는 값들을 풀어내는 행위 예를 들어 봐보자! 먼저, 튜플의 패킹은 ()로 값들을 묶는 방법이 있고 그냥 소괄호 없이도 패킹이 가능하다! 반대로 언패킹을 진행할 때는 패킹 된 값의 수와 변수의 수를 갖게하여 할당해주면 된다. 그리고 언패킹 과정에서 *을 사용하여 둘 이상의 값을 리스트로 묶어서 하나의 변수에 저장하는 것도 가능!! 이렇듯, 튜플이 아닌 리스트로 묶인다는 사실을 기억하자. 현재는 맨 끝 값만 *을 사용하여 값을 묶었지만 가운데, 맨 앞 상관없이 묶을 수 있다는 것도 기..
'제너레이터'는 Iterator 객체의 한 종류이다! 따라서 next 함수를 호출하면 값을 하나 씩 얻을 수 있다. 제너레이터 객체를 만들기 위한 두 가지 방법 제너레이터 함수(function) 제너레이터를 만들기 위한 함수 정의 제너레이터 표현식(expression) 제너레이터를 만들기 위한 식 제너레이터 함수 제너레이터 함수를 만들기 위해선 꼭 필요한 녀석이 있다! 바로 yeild라는 것인데, 함수에서 return과 비슷한 역할이라고 생각하면 된다. 우리는 함수 내에 yield가 선언되기만 하면 아 이 함수는 제너레이터 함수구나라고 생각하면 되겠다. >>> def gen_num(): print('first num') yield 1 print('second num') yield 2 >>> gen = g..
map & filter map 함수와 filter 함수를 통해 반환되는 객체는 iterator 객체이자 generator 객체이다. 그리고 함수에 들어가는 2번째 인자는 iterable 객체여야한다. 이 특징이 map과 filter 함수의 장점이자 쓰는 이유가 되겠다. 그리고 두 함수의 차이는 첫번째 인자로 들어가는 함수의 리턴 값에 차이가 있다. filter 함수의 경우 첫번째로 들어가는 함수가 True or False를 반환을 하며 '걸러주는 기능'을 한다고 보면 된다. 두 함수가 iterator 객체이자 generator 객체인 이유는 iterable 객체의 값을 순차적으로 함수와 mapping하여 값을 반환하기 때문! generator객체에 대해서는 다음 시간에 더 자세히 알아보도록하자! *아! ..
iter 함수 하나 이상의 값을 저장하거나 꺼내보는 것은 빈번하고 중요한 일이다. 보편적으로 for문을 사용하여 2개 이상의 값들을 꺼내보는 작업을 했는데, 이러한 작업이 중요하기에 상황에 따라 우리는 유연하게 대처할 필요가 있다. 따라서 이번에 소개할 방법은 원하는 시기에 필요에 따라 값을 꺼낼 수 있는 iterator 객체를 설명하고자 한다. >>> ds = [1,2,3,4] >>> ir = iter(ds) >>> next(ir) 1 >>> next(ir) 2 >>> next(ir) 3 >>> next(ir) 4 >>> next(ir) Traceback (most recent call last): File ~~~~~~ next(ir) StopIteration iter 함수 코드 정리를 하면 이런대 ..
두 객체의 비교와 복사 객체를 비교할 때 사용할 수 있는 두 가지 연산자 '==', 'is' 얼핏 보면 같아보이지만, 사실 이 두 가지의 차이를 분명하게 짚고 넘어가야한다. v1 == v2 변수 v1과 v2가 참조하는 객체의 내용이 같은가? v1 is v2 변수 v1과 v2가 참조하는 객체는 동일한 객체인가? 예시를 보며 설명해보자. >>> r1 = [1,2,3] >>> r2 = [1,2,3] >>> r1 is r2 #참조하는 객체가 동일 객체인가? 즉, 메모리 주소가 같니? False >>> r1 == r2 #참조하는 객체의 내용이 같은가? 즉, 두 값의 내용이 일치하니?? True 참조에 대해 앞서 블로깅을 했지만 여기서 간략히 짚고 넘어가자면, 메모리에 저장된 값에 변수명이 적힌 포스트잇을 붙이는 ..