Python의 속성 라이브러리는 클래스 생성을 단순화하고 상용구 코드를 줄이려는 개발자를 위한 게임 체인저입니다. 이 라이브러리는 NASA에서도 신뢰를 받고 있습니다.
2015년 Hynek Schlawack이 만든 attrs는 특수 메서드를 자동으로 생성하고 클래스를 정의하는 깔끔하고 선언적인 방법을 제공하는 기능으로 인해 Python 개발자들 사이에서 빠르게 선호되는 도구가 되었습니다.
데이터 클래스는 일종의 속성 하위 집합입니다.
속성이 유용한 이유:
설치:
attrs를 시작하려면 pip:
를 사용하여 설치할 수 있습니다.
pip install attrs
기본 사용법:
다음은 속성을 사용하여 클래스를 정의하는 방법에 대한 간단한 예입니다.
import attr @attr.s class Person: name = attr.ib() age = attr.ib() # Creating an instance person = Person("Alice", 30) print(person) # Person(name='Alice', age=30)
attrs는 클래스에 대한 init, repr 및 eq 메소드를 자동으로 생성합니다.
@attr.s class Book: title = attr.ib() author = attr.ib() year = attr.ib() book1 = Book("1984", "George Orwell", 1949) book2 = Book("1984", "George Orwell", 1949) print(book1) # Book(title='1984', author='George Orwell', year=1949) print(book1 == book2) # True
import attr from typing import List @attr.s class Library: name = attr.ib(type=str) books = attr.ib(type=List[str], default=attr.Factory(list)) capacity = attr.ib(type=int, default=1000) library = Library("City Library") print(library) # Library(name='City Library', books=[], capacity=1000)
import attr def must_be_positive(instance, attribute, value): if value4. 고급 사용법
에이. 속성 동작 사용자 정의:
import attr @attr.s class User: username = attr.ib() _password = attr.ib(repr=False) # Exclude from repr @property def password(self): return self._password @password.setter def password(self, value): self._password = hash(value) # Simple hashing for demonstration user = User("alice", "secret123") print(user) # User(username='alice')비. 고정된 인스턴스 및 슬롯:
@attr.s(frozen=True) # slots=True is the default class Point: x = attr.ib() y = attr.ib() point = Point(1, 2) try: point.x = 3 # This will raise an AttributeError except AttributeError as e: print(e) # can't set attribute기음. 팩토리 기능 및 초기화 후 처리:
import attr import uuid @attr.s class Order: id = attr.ib(factory=uuid.uuid4) items = attr.ib(factory=list) total = attr.ib(init=False) def __attrs_post_init__(self): self.total = sum(item.price for item in self.items) @attr.s class Item: name = attr.ib() price = attr.ib(type=float) order = Order(items=[Item("Book", 10.99), Item("Pen", 1.99)]) print(order) # Order(id=UUID('...'), items=[Item(name='Book', price=10.99), Item(name='Pen', price=1.99)], total=12.98)5. 모범 사례 및 일반적인 함정
모범 사례:
도서관 | 특징 | 성능 | 지역 사회 |
---|---|---|---|
속성 | 자동 메소드 생성, 유형 및 기본값이 포함된 속성 정의, 유효성 검사기 및 변환기 | 수동 코드보다 더 나은 성능 | 활성 커뮤니티 |
농담 | 데이터 검증 및 설정 관리, 자동 메소드 생성, 유형 및 기본값을 사용한 속성 정의, 검증기 및 변환기 | 좋은 성과 | 활성 커뮤니티 |
데이터 클래스 | Python 3.7에 내장되어 더 쉽게 접근할 수 있습니다. | Python 버전과 연결됨 | 내장 Python 라이브러리 |
attrs 및 데이터 클래스는 pydantic1.
보다 빠릅니다.성능:
attrs는 일반적으로 최적화된 구현으로 인해 수동으로 작성된 클래스나 다른 라이브러리보다 더 나은 성능을 제공합니다.
실제 사례:
from attr import define, Factory from typing import List, Optional @define class Customer: id: int name: str email: str orders: List['Order'] = Factory(list) @define class Order: id: int customer_id: int total: float items: List['OrderItem'] = Factory(list) @define class OrderItem: id: int order_id: int product_id: int quantity: int price: float @define class Product: id: int name: str price: float description: Optional[str] = None # Usage customer = Customer(1, "Alice", "[email protected]") product = Product(1, "Book", 29.99, "A great book") order_item = OrderItem(1, 1, 1, 2, product.price) order = Order(1, customer.id, 59.98, [order_item]) customer.orders.append(order) print(customer)
attrs는 Python 클래스 정의를 단순화하는 동시에 데이터 검증 및 조작을 위한 강력한 기능을 제공하는 강력한 라이브러리입니다. 상용구 코드를 줄이고, 가독성을 높이고, 성능을 향상시키는 기능은 Python 개발자에게 귀중한 도구입니다.
커뮤니티 리소스:
다음 프로젝트에서 속성을 사용해 보고 그 이점을 직접 경험해 보세요. 귀하의 경험을 커뮤니티와 공유하고 지속적인 발전에 기여하십시오. 즐거운 코딩하세요!
https://stefan.sofa-rockers.org/2020/05/29/attrs-dataclasses-pydantic/ ↩
부인 성명: 제공된 모든 리소스는 부분적으로 인터넷에서 가져온 것입니다. 귀하의 저작권이나 기타 권리 및 이익이 침해된 경우 자세한 이유를 설명하고 저작권 또는 권리 및 이익에 대한 증거를 제공한 후 이메일([email protected])로 보내주십시오. 최대한 빨리 처리해 드리겠습니다.
Copyright© 2022 湘ICP备2022001581号-3