"إذا أراد العامل أن يؤدي عمله بشكل جيد، فعليه أولاً أن يشحذ أدواته." - كونفوشيوس، "مختارات كونفوشيوس. لو لينجونج"
الصفحة الأمامية > برمجة > لماذا يجب عليك استخدام attrs أكثر

لماذا يجب عليك استخدام attrs أكثر

تم النشر بتاريخ 2024-11-07
تصفح:939

Why should you use attrs more

مقدمة

تعد مكتبة Attrs الخاصة بـ Python بمثابة تغيير جذري لقواعد اللعبة للمطورين الذين يتطلعون إلى تبسيط إنشاء الفصل وتقليل التعليمات البرمجية النمطية. هذه المكتبة موثوقة حتى من قبل ناسا.
تم إنشاء attrs بواسطة Hynek Schlawack في عام 2015، وسرعان ما أصبحت أداة مفضلة بين مطوري Python لقدرتها على إنشاء أساليب خاصة تلقائيًا وتوفير طريقة واضحة وتعريفية لتحديد الفئات.
فئات البيانات هي نوع من مجموعة فرعية من attrs.

لماذا تعتبر attrs مفيدة:

  • تقليل الكود المعياري
  • يحسن إمكانية قراءة التعليمات البرمجية وقابلية صيانتها
  • يوفر ميزات قوية للتحقق من صحة البيانات وتحويلها
  • يعزز الأداء من خلال التطبيقات المحسنة

2. البدء مع 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)

3. الميزات الأساسية للميزات

أ. توليد الطريقة التلقائية:

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 value 



4. الاستخدام المتقدم

أ. تخصيص سلوك السمة:

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. أفضل الممارسات والمزالق الشائعة

أفضل الممارسات:

  • استخدم التعليقات التوضيحية للنوع لتحسين إمكانية قراءة التعليمات البرمجية ودعم IDE
  • الاستفادة من أدوات التحقق من سلامة البيانات
  • استخدام الفئات المجمدة للكائنات غير القابلة للتغيير
  • الاستفادة من إنشاء الطريقة التلقائية لتقليل تكرار التعليمات البرمجية

المخاطر الشائعة:

  • نسيان استخدام مصمم الديكور @attr.s في الفصل
  • الإفراط في استخدام أدوات التحقق المعقدة التي يمكن أن تكون طرقًا منفصلة
  • عدم أخذ تأثير الأداء الناتج عن الاستخدام المكثف لوظائف المصنع في الاعتبار

6. attrs مقابل المكتبات الأخرى

مكتبة سمات أداء مجتمع
المزايا إنشاء الطريقة تلقائيًا، وتعريف السمات مع الأنواع والقيم الافتراضية، وأدوات التحقق من الصحة، والمحولات أداء أفضل من الكود اليدوي المجتمع النشط
Pydantic التحقق من صحة البيانات وإدارة الإعدادات، وإنشاء الطريقة التلقائية، وتعريف السمات مع الأنواع والقيم الافتراضية، وأدوات التحقق من الصحة والمحولات الأداء الجيد المجتمع النشط
فئات البيانات مدمجة في Python 3.7، مما يسهل الوصول إليها مرتبط بإصدار بايثون مكتبة بايثون المدمجة

attrs وفئات البيانات أسرع من pydantic1.

مقارنة مع فئات البيانات:

  • attrs أكثر ثراءً بالميزات ومرونة
  • تم دمج فئات البيانات في Python 3.7، مما يجعلها أكثر سهولة في الوصول إليها
  • يتمتع attrs بأداء أفضل في معظم الحالات
  • ترتبط فئات البيانات بإصدار Python، بينما يمكن استخدام attrs كمكتبة خارجية مع أي إصدار Python.

مقارنة مع pydantic:

  • يركز pydantic على التحقق من صحة البيانات وإدارة الإعدادات
  • attrs أكثر عمومية الأغراض وتتكامل بشكل أفضل مع قواعد التعليمات البرمجية الموجودة
  • يحتوي pydantic على تسلسل JSON مدمج، بينما يتطلب attrs مكتبات إضافية

متى تختار attrs:

  • للتسلسلات الهرمية المعقدة للفئات ذات السلوكيات المخصصة
  • عندما تحتاج إلى تحكم دقيق في تعريفات السمات
  • بالنسبة للمشاريع التي تتطلب التوافق مع Python 2 (على الرغم من أنها أقل أهمية الآن)

7. الأداء والتطبيقات الواقعية

أداء:
تقدم 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)

8. الخاتمة والدعوة إلى العمل

attrs هي مكتبة قوية تعمل على تبسيط تعريفات فئة Python مع توفير ميزات قوية للتحقق من صحة البيانات ومعالجتها. إن قدرتها على تقليل التعليمات البرمجية النمطية وتحسين إمكانية القراءة وتحسين الأداء تجعلها أداة لا تقدر بثمن لمطوري بايثون.

موارد المجتمع:

  • مستودع جيثب: https://github.com/python-attrs/attrs
  • التوثيق: https://www.attrs.org/
  • صفحة PyPI: https://pypi.org/project/attrs/

جرب attrs في مشروعك القادم واختبر فوائده بشكل مباشر. شارك تجاربك مع المجتمع وساهم في تطويره المستمر. برمجة سعيدة!


  1. https://stefan.sofa-rockers.org/2020/05/29/attrs-dataclasses-pydantic/ ↩

بيان الافراج تم نشر هذه المقالة على: https://dev.to/soumendrak/why-should-you-use-attrs-more-4dim?1 إذا كان هناك أي انتهاك، يرجى الاتصال بـ [email protected] لحذفه
أحدث البرنامج التعليمي أكثر>

تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.

Copyright© 2022 湘ICP备2022001581号-3