attrs는 객체 프로토콜(Dunder 메소드라고도 함) 구현의 고된 수고를 덜어줌으로써 클래스 작성 의 즐거움을 되살려주는 Python 패키지입니다. 2020년부터 NASA의 화성 임무에 대한 신뢰를 받고 있습니다!
주요 목표는 코드 속도를 저하시키지 않고 간결 하고 올바른 소프트웨어를 작성하도록 돕는 것입니다.
attrs는 우리의 놀라운 후원자 없이는 불가능할 것입니다. 특히 조직 계층 이상에서 우리를 아낌없이 지원해 주시는 분들은 다음과 같습니다.
attrs 의 유지 관리를 더욱 지속 가능하게 만드는 데 도움이 되도록 참여해 보세요!
attrs는 클래스 데코레이터와 해당 클래스의 속성을 선언적으로 정의하는 방법을 제공합니다.
>>> from attrs import asdict, define, make_class, Factory
>>> @ define
... class SomeClass :
... a_number: int = 42
... list_of_numbers: list[ int ] = Factory( list )
...
... def hard_math ( self , another_number ):
... return self .a_number + sum ( self .list_of_numbers) * another_number
>>> sc = SomeClass( 1 , [ 1 , 2 , 3 ])
>>> sc
SomeClass(a_number=1, list_of_numbers=[1, 2, 3])
>>> sc.hard_math( 3 )
19
>>> sc == SomeClass( 1 , [ 1 , 2 , 3 ])
True
>>> sc != SomeClass( 2 , [ 3 , 2 , 1 ])
True
>>> asdict(sc)
{'a_number': 1, 'list_of_numbers': [1, 2, 3]}
>>> SomeClass()
SomeClass(a_number=42, list_of_numbers=[])
>>> C = make_class( " C " , [ " a " , " b " ])
>>> C( " foo " , " bar " )
C(a='foo', b='bar')
속성을 선언한 후 attrs 는 다음을 제공합니다.
__repr__
,지루한 상용구 코드를 계속해서 작성 하지 않고 , 런타임 성능 저하 없이 말이죠.
이 예제에서는 버전 20.1.0에 도입된 attrs 의 최신 API와 버전 21.3.0에 추가된 attrs 패키지 가져오기 이름을 사용합니다. 클래식 API( @attr.s
, attr.ib
및 해당 비즈니스 별칭) 및 attr
패키지 가져오기 이름은 무기한 유지됩니다.
자세한 설명은 On The Core API Names를 확인하세요!
괜찮아요! 유형은 attrs 와 함께 전적으로 선택사항 입니다. 유형에 주석을 붙이는 대신 속성에 attrs.field()
할당하기만 하면 됩니다.
from attrs import define , field
@ define
class SomeClass :
a_number = field ( default = 42 )
list_of_numbers = field ( factory = list )
주석에서 attrs는 dataclasses
를 생각나게 할 수 있습니다(실제로 dataclasses
는 attrs 의 자손입니다). 실제로는 훨씬 더 많은 일을 하고 더 유연합니다. 예를 들어, 동등성 검사를 위해 NumPy 배열의 특수 처리를 정의할 수 있고, 초기화 프로세스에 연결하는 더 많은 방법을 허용하고, __init_subclass__
를 대체하고, 디버거를 사용하여 생성된 메서드를 단계별로 실행할 수 있습니다.
자세한 내용은 비교 페이지를 참조하세요. 그러나 일반적으로 우리는 기대하는 대로 작동하도록 하기 위해 자연에 반하는 범죄를 저지를 가능성이 더 높지만 실제로는 상당히 복잡합니다.
python-attrs
태그를 사용하세요.Tidelift 구독의 일부로 제공됩니다.
attrs 및 수천 개의 기타 패키지 관리자는 Tidelift와 협력하여 애플리케이션 구축에 사용하는 오픈 소스 패키지에 대한 상업적 지원 및 유지 관리를 제공하고 있습니다. 시간을 절약하고, 위험을 줄이고, 코드 상태를 개선하는 동시에 사용하는 패키지의 관리자에게 비용을 지불하세요.