تعد مكتبة Attrs الخاصة بـ Python بمثابة تغيير جذري لقواعد اللعبة للمطورين الذين يتطلعون إلى تبسيط إنشاء الفصل وتقليل التعليمات البرمجية النمطية. هذه المكتبة موثوقة حتى من قبل ناسا.
تم إنشاء attrs بواسطة Hynek Schlawack في عام 2015، وسرعان ما أصبحت أداة مفضلة بين مطوري Python لقدرتها على إنشاء أساليب خاصة تلقائيًا وتوفير طريقة واضحة وتعريفية لتحديد الفئات.
فئات البيانات هي نوع من مجموعة فرعية من attrs.
لماذا تعتبر attrs مفيدة:
تثبيت:
للبدء باستخدام attrs، يمكنك تثبيته باستخدام النقطة:
pip install attrs
الاستخدام الأساسي:
فيما يلي مثال بسيط لكيفية استخدام 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. أفضل الممارسات والمزالق الشائعة
أفضل الممارسات:
مكتبة | سمات | أداء | مجتمع |
---|---|---|---|
المزايا | إنشاء الطريقة تلقائيًا، وتعريف السمات مع الأنواع والقيم الافتراضية، وأدوات التحقق من الصحة، والمحولات | أداء أفضل من الكود اليدوي | المجتمع النشط |
Pydantic | التحقق من صحة البيانات وإدارة الإعدادات، وإنشاء الطريقة التلقائية، وتعريف السمات مع الأنواع والقيم الافتراضية، وأدوات التحقق من الصحة والمحولات | الأداء الجيد | المجتمع النشط |
فئات البيانات | مدمجة في Python 3.7، مما يسهل الوصول إليها | مرتبط بإصدار بايثون | مكتبة بايثون المدمجة |
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 مع توفير ميزات قوية للتحقق من صحة البيانات ومعالجتها. إن قدرتها على تقليل التعليمات البرمجية النمطية وتحسين إمكانية القراءة وتحسين الأداء تجعلها أداة لا تقدر بثمن لمطوري بايثون.
موارد المجتمع:
جرب attrs في مشروعك القادم واختبر فوائده بشكل مباشر. شارك تجاربك مع المجتمع وساهم في تطويره المستمر. برمجة سعيدة!
https://stefan.sofa-rockers.org/2020/05/29/attrs-dataclasses-pydantic/ ↩
تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.
Copyright© 2022 湘ICP备2022001581号-3