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

Python 속성:고급 데이터 클래스, 예제 코드 포함

Python Attrs 패키지를 사용하면 간단한 주석을 사용하여 고급 데이터 클래스를 만들 수 있습니다. 물론 python에는 고유한 기본 데이터 클래스 모듈도 있지만 Python attrs 패키지는 여러분이 좋아할 만한 몇 가지 추가 기능을 제공합니다!

목차

<내비>

설치 속성

attrs 패키지는 기본 라이브러리의 일부가 아니므로 pip install 명령 또는 Pipenv와 같은 유사한 것으로 설치해야 합니다. 다른 프로젝트를 방해하지 않도록 가상 환경을 만들고 싶을 수도 있습니다. 패키지 이름은 attrs이므로 설치는 다음과 같습니다.

$ pip install attrs

# or with pipenv:
$ pipenv install attrs

속성 대 데이터 클래스

attrs의 작성자 실제로 Python에 데이터 클래스를 도입한 PEP에서 작업했습니다. Python의 기본 데이터 클래스는 의도적으로 더 간단하고 이해하기 쉽게 유지하면서 attr은 원하는 모든 기능을 제공합니다!

Python attrs을 선택해야 하는 몇 가지 이유 내장 데이터 클래스는 다음과 같습니다.

기본 Python 속성 예제

먼저 매우 기본적인 예를 살펴보겠습니다.

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)

# Output: 
#   Person(name='John', surname='Doe', age=NOTHING)
#   Person(name='Bill', surname='Gates', age=60)

몇 가지 관찰:

다음으로 이 패키지가 일반 데이터 클래스에 대해 제공하는 가장 중요한 기능인 유효성 검사기와 변환기를 살펴보겠습니다.

Python 속성 유효성 검사기 예제

두 가지 방법으로 attr 데이터 클래스에 유효성 검사기를 추가할 수 있습니다.

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

여기서 먼저 호출 가능한 함수 메서드를 보여 드리겠습니다. Attrs는 즉시 사용할 수 있는 여러 유효성 검사기를 제공하며 그 중 instance_of을 사용합니다. 다음 예에서 유효성 검사기:

>>> @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 유효성 검사기는 문자열 대신 int 유형이 필요하기 때문에 오류가 발생합니다.

이제 자체 유효성 검사기를 정의해 보겠습니다.

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))

# Output will be something like:
# DividableByTwo(x=60)
# ...
# ValueError: 11 is not dividable by 2

Python 속성 변환기 예

변환기는 설정된 값을 가져와 자동으로 변환합니다. 당신은 모든 종류의 목적을 위해 이것을 사용할 수 있습니다. 한 가지 예는 값을 자동으로 int로 변환하는 것입니다. 다시, 호출 가능한 함수를 사용하여 시작하겠습니다. 이 경우에는 단순히 Python의 int() 함수를 사용합니다.

import attr

@attr.s
class C(object):
    x = attr.ib(converter=int)

c = C("1")
print(c)
# Output:
# C(x=1)

우리의 입력(문자열 "1")은 자동으로 정수로 변환되었습니다. 변환기는 유효성 검사기보다 먼저 실행되기 때문에 변환 후 최종 값의 유효성을 검사할 수 있습니다. 예를 들어 위의 두 가지 예를 들어 먼저 입력을 int로 변환한 다음 값이 2로 나눌 수 있는지 확인할 수 있습니다.

Python 속성과 함께 슬롯 사용

마지막으로 슬롯 클래스를 사용하도록 attrs에 지시할 수 있습니다. 슬롯 클래스는 일반 클래스보다 몇 가지 장점이 있습니다.

간단히 말해서 슬롯형 클래스를 사용하면 개체 인스턴스가 가질 것으로 기대하는 인스턴스 속성을 명시적으로 명시합니다. 이런 식으로 Python은 몇 가지 검사 등을 생략할 수 있으므로 메모리 사용량이 줄어들고 속도가 약간 빨라집니다. 여기 attr 문서에서 자세한 내용을 찾을 수 있습니다.

그러나 슬롯 클래스에는 특히 수동으로 생성할 때 주의 사항이 있습니다. 다행히 attrs는 기능을 활성화하는 간단한 방법을 제공합니다.

import attr

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

계속 학습


python

  1. 파이썬 데이터 유형
  2. EXAMPLE이 있는 Python String strip() 함수
  3. 예제가 있는 Python 문자열 count()
  4. 예제가 있는 Python round() 함수
  5. 예제가 있는 Python map() 함수
  6. 예제가 있는 Python Timeit()
  7. 예제가 있는 컬렉션의 Python 카운터
  8. Python time.sleep():코드에 지연 추가(예제)
  9. 예제가 있는 Python 목록 count()
  10. 예제가 있는 Python 목록 index()