본문 바로가기

나는 이렇게 학습한다/Language51

Python _ TypedDict를 사용하는 이유(feat. mypy) Python도 Type을 확인한다구! 파이썬은 타입 힌트를 제공함으로써 해당 데이터가 어떤 타입을 갖고 있는지 알 수 있다. 다만 파이썬은 타입을 강제하지 않기 때문에 일반 런타임 환경에서는 타입의 정상여부를 알기 어렵다. 때문에 타입이 정상인지 확인하기 위해 mypy 나 pyright 같은 정적 검사 도구를 이용한다. 하지만 그럼에도 애매한 경우가 있는데 바로 dict와 같은 value들이 다양한 타입을 가질 경우이다. dict value들의 타입을 일일이 확인하고 명시하기란 매우 귀찮은 일이다. 때문에 Dict[str, Any] 처럼 value에 해당되는 타입을 Any로 넘기는 경우가 많다. 하지만 이는 바람직하지 않다. Any가 어떤 문제를 일으키는지 먼저 살펴보고, 이에 대한 해결책으로서 Type.. 2022. 6. 22.
Python _ dict의 keys()처럼 dataclass에서 속성 목록 가져오기 파이썬에서 객체를 만드는 방법 중에 dataclass가 있다. @dataclass 데코레이터를 사용하면 타입 유형을 명시한 객체를 만들 수 있다. dataclass를 만드는 코드는 아래와 같다. from dataclasses import dataclass @dataclass(frozen=True) class Dataclass: a:int b:int c:int data = Dataclass(a=1,b=3,c=5) print(data) # 출력 : Dataclass(a=1, b=3, c=5) print(data.a) # 1 print(data.b) # 3 print(data.c) # 5 이렇게 만든 객체는 타입 유형을 명시하고 싶을 때나 DTO, 값 객체 등의 불변 객체로도 사용할 수 있다. dataclas.. 2022. 6. 21.
Python _ @dataclass 사용법과 타입 확인 파이썬에서는 @dataclass를 통해 데이터의 타입을 명시하고 안정적으로 다룰 수 있습니다. 이 글에서는 간단한 사용법을 소개하고 타입 확인까지 해보겠습니다. @dataclass 사용법 먼저 다음처럼 코드를 작성합니다. from dataclasses import dataclass @dataclass() class Data: name: str int: int dict: dict name은 str, int는 int, dict는 dict로 타입을 지정하였습니다. 이어서 데이터를 만들어보겠습니다. data1 = Data( name = "변덕순", int = 1, dict = {"a":"b"} ) Data클래스를 활용해 data1 이라는 인스턴스를 만들었습니다. print로 name과 타입을 출력해보겠습니다. .. 2022. 5. 18.
Python _ 런타임 중에 스크립트 파일 실행하기 스크립트는 보통 직접 명령어를 입력해 실행합니다. 하지만 runtime 환경에서 스크립트 파일을 실행해야할 때도 있습니다. 그런 경우에는 개발자가 직접 터미널에 스크립트 실행 명령어를 치는 것이 아닌, 미리 작성된 파이썬 코드에 의해 스크립트가 실행되도록 해야합니다. 이번 글에는 OS를 사용한 스크립트 실행 방법을 알려드리겠습니다. OS import os os.system("ls") 방법은 아주 간단합니다. os를 import 하고 system 메서드를 사용해 명령어를 안에 넣습니다. 그리고 실행을 해보면 그 결과 값도 함께 보여줍니다. (ls 는 해당 디렉토리를 보여줍니다) >>> project 현재는 project 폴더만 보이네요 하지만 스크립트를 실행하기 위해서 폴더 내로 이동해야 한다고 가정해봅시.. 2022. 4. 28.
Python _ @property로 getter, setter 구현하기 (feat. 캡슐화) 캡슐화 파이썬은 클래스를 작성할 때, 변수나 함수 앞에 '__' 를 붙여 캡슐화, 즉 은닉을 할 수 있습니다. 예를 들어 객체 내 변수에 접근할 때, 일반적으로 다음처럼 '.'과 변수명만으로 쉽게 접근할 수 있습니다. class Robot: def __init__(self, name, num): self.name = name self.num = num robot = Robot('다코', '0001') print(robot.name, robot.num) ''' 결과 >>> 다코 0001 ''' 하지만 이것은 외부에서 변수를 쉽게 조작할 수 있음을 의미합니다. 이를 방지하기 위해 변수앞에 '__'를 붙여 외부에서 접근할 수 없도록 막을 수 있습니다. class Robot: def __init__(self, .. 2022. 4. 2.
Python _ @classmethod, @staticmethod 란 무엇인가? 파이썬에서 클래스들을 살펴보면 가끔 뜬금없이 데코레이터가 등장하곤 합니다. 바로 @classmethod, @staticmethod 데코레이터입니다. 이 두 데코레이터를 왜 사용하는지 같이 살펴보겠습니다. 우선 다음처럼 클래스 코드를 작성하고 인스턴스를 만들겠습니다. class Robot: number = '0001' def __init__(self, name): self.name = name def 인스턴스메서드(self): print(f'인스턴스메서드 호출 {self.name}') @classmethod def 클래스메서드(cls): print(f'클래스메서드 호출 {cls.number}') @staticmethod def 스태틱메서드(): print('스태틱메서드 호출') robot = Robot('.. 2022. 3. 31.