산업 제조
산업용 사물 인터넷 | 산업자재 | 장비 유지 보수 및 수리 | 산업 프로그래밍 |
home  MfgRobots >> 산업 제조 >  >> Industrial programming >> python

파이썬 attrs 마스터: 실전 예제로 고급 데이터 클래스 만들기

파이썬 attrs 마스터: 실전 예제로 고급 데이터 클래스 만들기

파이썬 attrs 패키지로 간단한 어노테이션으로 고급 데이터 클래스 생성 가능. 파이썬 자체 네이티브 데이터 클래스 모듈도 있지만, attrs 패키지는 당신이 좋아할 추가 기능 몇 가지 제공!

목차

attrs 설치

attrs 패키지는 기본 라이브러리 부분 아님, pip install 명령이나 Pipenv 같은 걸로 설치 필요. 가상환경 만들어 다른 프로젝트 간섭 안 되게 하는 게 좋음. 패키지 이름은 attrs, 설치는 이렇게:

$ pip install attrs # 또는 pipenv: $ pipenv install attrs

attrs vs 데이터 클래스

attrs 저자들이 사실 데이터 클래스 파이썬 도입 PEP 작업함. 파이썬 네이티브 데이터 클래스는 의도적으로 더 단순하고 이해 쉽게 유지, attrs는 원하는 전체 기능 범위 제공!

attrs를 내장 데이터 클래스 대신 선택할 이유:

기본 attrs 예제

아주 기본 예제부터 보자:

import attr
@attr.s
class Person(object):
    name = attr.ib(default='John')
    surname = attr.ib(default='Doe')
    age = attr.ib(init=False)
p = Person()
print(p)
p = Person('Bill', 'Gates')
p.age = 60
print(p)
# 출력:
# Person(name='John', surname='Doe', age=NOTHING)
# Person(name='Bill', surname='Gates', age=60)

몇 가지 관찰:

이제 일반 데이터 클래스 대비 이 패키지 제공 가장 중요한 기능: validator와 converter 보자.

attrs validator 예제

attrs 데이터 클래스에 validator 추가 두 가지 방법:

  1. 데코레이터 사용
  2. 호출 가능 함수 제공

여기선 호출 가능 함수 방법 먼저 시연. attrs 몇 가지 validator 기본 제공, 그중 instance_of validator 다음 예제서 사용:

>>> @attr.s
... class C(object):
...     x = attr.ib(validator=attr.validators.instance_of(int))
>>> C(42)
C(x=42)
>>> C("a string")
Traceback (most recent call last):
... TypeError: ("'x' must be <type 'int'> (got 'a string' that is a <type 'str'>).", ...

x에 문자열 값으로 객체 C 생성 시도하니 instance_of validator가 int 타입 요구하는데 문자열 와서 에러 던짐.

이제 우리 validator 정의:

import attr
@attr.s
class DividableByTwo(object):
    x = attr.ib()
    @x.validator
    def check(self, attribute, value):
        if value % 2 != 0:
            raise ValueError(f'{value} is not dividable by 2')
print(DividableByTwo(60))
print(DividableByTwo(11))
# 출력:
# DividableByTwo(x=60)
# ...
# ValueError: 11 is not dividable by 2

attrs converter 예제

converter는 설정된 값 가져다 자동 변환. 여러 용도 가능. 예: 값 자동 int 변환. 다시 호출 가능 함수로 시작, 여기선 파이썬 int() 함수 그냥 사용:

import attr
@attr.s
class C(object):
    x = attr.ib(converter=int)
c = C("1")
print(c)
# 출력:
# C(x=1)

입력(문자열 "1") 자동 정수 변환. converter는 validator 전에 실행되므로 변환 후 최종 값 검증 가능. 예: 위 두 예제 결합해 입력을 먼저 int로 변환, 그 후 2로 나누어 떨어지는지 확인.

attrs와 슬롯 사용

마지막으로, attrs에게 슬롯 클래스 사용 지시 가능. 슬롯 클래스는 일반 클래스 대비 이점:

간단히: 슬롯 클래스로 객체 인스턴스 가질 예상 인스턴스 속성 명시. 이렇게 파이썬 일부 체크 등 생략해 메모리 사용 감소·약간 속도 증가. 자세한 건 attrs 문서 참조.

하지만 슬롯 클래스도 주의점 있음, 특히 수동 생성 시. 다행히 attrs가 기능 활성화 간단 방법 제공:

import attr
@attr.s(slots=True)
class YourClassName:
    ...

계속 학습

python

  1. 파이썬 데이터 타입 마스터하기: 실전 가이드
  2. Python strip() 메서드 완전 정복: 종합 가이드와 실전 예제
  3. Python str.count() 마스터하기: 문자 및 부분문자열 개수 세기 예제
  4. 파이썬 round() 함수 완전 정복: 실용 예제로 이해하기
  5. 파이썬 map() 함수 마스터하기: 문법, 예제, 모범 사례
  6. 파이썬 timeit()으로 실행 시간 측정하기: 실용 예제
  7. 파이썬 collections.Counter: 효율적 카운팅, 업데이트, 산술 연산
  8. 파이썬 time.sleep(): 코드에 지연 추가하는 방법 (예제)
  9. 파이썬 list.count() 전문가 가이드: 실전 예제로 배우는 요소 개수 세기
  10. 파이썬 list.index() – 요소 위치 찾기 실전 예제와 대안 기법