"यदि कोई कर्मचारी अपना काम अच्छी तरह से करना चाहता है, तो उसे पहले अपने औजारों को तेज करना होगा।" - कन्फ्यूशियस, "द एनालेक्ट्स ऑफ कन्फ्यूशियस। लू लिंगगोंग"
मुखपृष्ठ > प्रोग्रामिंग > आपको attrs का अधिक उपयोग क्यों करना चाहिए?

आपको attrs का अधिक उपयोग क्यों करना चाहिए?

2024-11-07 को प्रकाशित
ब्राउज़ करें:149

Why should you use attrs more

परिचय

पायथन की एटीआरएस लाइब्रेरी उन डेवलपर्स के लिए एक गेम-चेंजर है जो क्लास निर्माण को सरल बनाना और बॉयलरप्लेट कोड को कम करना चाहते हैं। इस लाइब्रेरी पर NASA का भी भरोसा है।
2015 में हाइनेक श्लावैक द्वारा बनाया गया, attrs स्वचालित रूप से विशेष तरीकों को उत्पन्न करने और कक्षाओं को परिभाषित करने के लिए एक साफ, घोषणात्मक तरीका प्रदान करने की क्षमता के लिए पायथन डेवलपर्स के बीच एक पसंदीदा उपकरण बन गया है।
डेटाक्लास एक प्रकार का attrs का सबसेट है।

एटीआर उपयोगी क्यों है:

  • बॉयलरप्लेट कोड को कम करता है
  • कोड पठनीयता और रख-रखाव में सुधार करता है
  • डेटा सत्यापन और रूपांतरण के लिए शक्तिशाली सुविधाएं प्रदान करता है
  • अनुकूलित कार्यान्वयन के माध्यम से प्रदर्शन को बढ़ाता है

2. एट्रर्स के साथ शुरुआत करना

स्थापना:
Attrs के साथ आरंभ करने के लिए, आप इसे pip का उपयोग करके इंस्टॉल कर सकते हैं:

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. सर्वोत्तम प्रथाएं और सामान्य नुकसान

सर्वोत्तम प्रथाएं:

  • बेहतर कोड पठनीयता और आईडीई समर्थन के लिए टाइप एनोटेशन का उपयोग करें
  • डेटा अखंडता के लिए सत्यापनकर्ताओं का लाभ उठाएं
  • अपरिवर्तनीय वस्तुओं के लिए जमे हुए कक्षाओं का उपयोग करें
  • कोड डुप्लिकेशन को कम करने के लिए स्वचालित विधि पीढ़ी का लाभ उठाएं

सामान्य नुकसान:

  • कक्षा में @attr.s डेकोरेटर का उपयोग करना भूल गए
  • जटिल सत्यापनकर्ताओं का अत्यधिक उपयोग जो अलग-अलग तरीके हो सकते हैं
  • फ़ैक्टरी फ़ंक्शंस के व्यापक उपयोग के प्रदर्शन प्रभाव पर विचार नहीं करना

6. एटीआर बनाम अन्य पुस्तकालय

पुस्तकालय विशेषताएँ प्रदर्शन समुदाय
attrs स्वचालित विधि निर्माण, प्रकार और डिफ़ॉल्ट मानों के साथ विशेषता परिभाषा, सत्यापनकर्ता और कनवर्टर्स मैन्युअल कोड से बेहतर प्रदर्शन सक्रिय समुदाय
पाइडेंटिक डेटा सत्यापन और सेटिंग्स प्रबंधन, स्वचालित विधि निर्माण, प्रकार और डिफ़ॉल्ट मानों के साथ विशेषता परिभाषा, सत्यापनकर्ता और कनवर्टर्स अच्छा प्रदर्शन सक्रिय समुदाय
डेटाक्लासेस पायथन 3.7 में निर्मित, उन्हें और अधिक सुलभ बनाता है पायथन संस्करण से जुड़ा हुआ है अंतर्निहित पायथन लाइब्रेरी

attrs और dataclasses pydantic1 से तेज़ हैं।

डेटाक्लास के साथ तुलना:

  • attrs अधिक सुविधा संपन्न और लचीला है
  • डेटाक्लास को पायथन 3.7 में बनाया गया है, जो उन्हें और अधिक सुलभ बनाता है
  • अधिकांश मामलों में attrs का प्रदर्शन बेहतर है
  • डेटाक्लास पायथन संस्करण से जुड़े हुए हैं, जबकि बाहरी लाइब्रेरी के रूप में एटीआर का उपयोग किसी भी पायथन संस्करण के साथ किया जा सकता है।

पाइडेंटिक के साथ तुलना:

  • पाइडेंटिक डेटा सत्यापन और सेटिंग्स प्रबंधन पर केंद्रित है
  • attrs अधिक सामान्य प्रयोजन है और मौजूदा कोडबेस के साथ बेहतर ढंग से एकीकृत होता है
  • पाइडेंटिक में अंतर्निहित JSON क्रमांकन है, जबकि attrs को अतिरिक्त लाइब्रेरी की आवश्यकता है

एटीआर कब चुनें:

  • कस्टम व्यवहार के साथ जटिल वर्ग पदानुक्रम के लिए
  • जब आपको विशेषता परिभाषाओं पर सूक्ष्म नियंत्रण की आवश्यकता होती है
  • उन परियोजनाओं के लिए जिन्हें पायथन 2 संगतता की आवश्यकता है (हालांकि अब कम प्रासंगिक है)

7. प्रदर्शन और वास्तविक दुनिया के अनुप्रयोग

प्रदर्शन:
एटीआर आमतौर पर अपने अनुकूलित कार्यान्वयन के कारण मैन्युअल रूप से लिखित कक्षाओं या अन्य पुस्तकालयों की तुलना में बेहतर प्रदर्शन प्रदान करता है।

वास्तविक दुनिया का उदाहरण:

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 एक शक्तिशाली लाइब्रेरी है जो डेटा सत्यापन और हेरफेर के लिए मजबूत सुविधाएँ प्रदान करते हुए पायथन वर्ग परिभाषाओं को सरल बनाती है। बॉयलरप्लेट कोड को कम करने, पठनीयता में सुधार और प्रदर्शन को बढ़ाने की इसकी क्षमता इसे पायथन डेवलपर्स के लिए एक अमूल्य उपकरण बनाती है।

सामुदायिक संसाधन:

  • गिटहब रिपॉजिटरी: https://github.com/python-attrs/attrs
  • दस्तावेज़ीकरण: https://www.attrs.org/
  • पीईपीआई पेज: https://pypi.org/project/attrs/

अपने अगले प्रोजेक्ट में एटीआर आज़माएं और इसके लाभों का प्रत्यक्ष अनुभव करें। समुदाय के साथ अपने अनुभव साझा करें और इसके चल रहे विकास में योगदान दें। हैप्पी कोडिंग!


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

विज्ञप्ति वक्तव्य यह आलेख यहां पुन: प्रस्तुत किया गया है: https://dev.to/soumenderk/why-should-you-use-attrs-more-4dim?1 यदि कोई उल्लंघन है, तो कृपया इसे हटाने के लिए [email protected] से संपर्क करें।
नवीनतम ट्यूटोरियल अधिक>

चीनी भाषा का अध्ययन करें

अस्वीकरण: उपलब्ध कराए गए सभी संसाधन आंशिक रूप से इंटरनेट से हैं। यदि आपके कॉपीराइट या अन्य अधिकारों और हितों का कोई उल्लंघन होता है, तो कृपया विस्तृत कारण बताएं और कॉपीराइट या अधिकारों और हितों का प्रमाण प्रदान करें और फिर इसे ईमेल पर भेजें: [email protected] हम इसे आपके लिए यथाशीघ्र संभालेंगे।

Copyright© 2022 湘ICP备2022001581号-3