LYTHON Telegram 66
Data Class in python- part 1

✓ طبق تعریف کتاب وزین Fluent Python می‌توان تعریف جالبی برای دیتا کلاس‌ها ارائه داد.
Python offers a few ways to build a simple class that is just a collection of fields, with little or no extra functionality. p163

✓ درواقع دیتا کلاس‌ها ذاتا ظرفی هستن برای نگه‌داری داده‌ها، متدها در این نوع کلاس نقش بسیار کم‌رنگی ایفا می‌کنند یا حتی می‌توان گفت، هیچ نقشی ندارند. مگر این که کاربرد متدی به نگه‌داری یا تغییر داده‌ها مربوط باشد.
به هر حال می‌توان به سه نوع نوشتن دیتا کلاس‌ها اشاره کرد.

1- @dataclasses.dataclass (python +3.7)
2- collections.namedtuple (python +2.6)
3- typing.NamedTuple (python +3.6)


✓ کتاب مثال جالبی زده است، فرض کنید که ما صرفا می‌خواهیم کلاسی تحت عنوان Coordinate تعریف کنیم که مختصات را در خود ذخیره کند.
class Coordinate:
    def __init__(self, lat, lon):
        self.lat = lat
        self.lon = lon

✓ این کلاس به راحتی قابل تعریف بود، اما ایراداتی را دارد که در ادامه به بیان آن‌ها خواهیم پرداخت. به کد زیر دقت کنید.
moscow = Coordinate(55.76, 37.62)
location = Coordinate(55.76, 37.62)
✓ دقت شود که مختصات جفت این ها یکسان است ولی وقتی  با == دو لوکیشن را مقایسه می‌کنیم به نتیجه دلخواه نخواهیم رسید زیرا مکان آن دو در حافظه درحال مقایسه است.

>>> location == moscow
False
>>> moscow
<coordinates.Coordinate object at 0x107142f10>

✓ پس دو مشکل اصلی را در حال نظاره‌ایم، یکی این که مجیک متد __repr__  را باید بازنویسی کنیم و به بازنویسی مجیک متد __eq__ نیز نیازمندیم. در ادامه از  اولین نوع دیتا کلاس استفاده خواهیم کرد. به کد زیر دقت کنید.
from dataclasess import dataclass 

@dataclass(frozen=True)
class Coordinate:
    lat: float
    lon: float

moscow = Coordinate(lat= 55.76, lon= 37.62 )
location = Coordinate(lat= 55.76, lon= 37.62 )

دقت شود که این نوع دیتا کلاس از تایپ هینت برای تعریف خود استفاده می‌کند و تایپ هینت یک نوع نوشتن آپشنال و اختیاری است و به هیچ عنوان قرار هم نیست که اجباری شود و فقط یک استثنا دارد آن هم دیتا کلاس است که باید در آن این Annotation رعایت گردد.

✓ مقدار frozen برابر True قرار داده شده، تا کلاس ایجاد شده immutable شود.

✓ نکته‌ی دیگری که باید در نظر گرفت، بهتر است که آرگومان‌های ورودی به صورت keyword only به دیتا کلاس برای ایجاد شیٔ داده شود زیرا ترتیب آرگومان‌های ورودی اینجا اهمیت دارد.
مشکلاتی که در تعریف قبلی کلاس Coordinate  به آن اشاره کردیم، در تعریف جدید به لطف باهوش بودن سازندگان پایتون حل شده است. کد زیر خود موضوع را روشن می‌کند.
>>>moscow == location 
True
>>>moscow
Coordinate(lat= 55.76, lon= 37.62 )

یعنی دو مجیک متد ذکر شده برای دیتاکلاس ما از پیش تعریف شده است.
@lython



tgoop.com/lython/66
Create:
Last Update:

Data Class in python- part 1

✓ طبق تعریف کتاب وزین Fluent Python می‌توان تعریف جالبی برای دیتا کلاس‌ها ارائه داد.
Python offers a few ways to build a simple class that is just a collection of fields, with little or no extra functionality. p163

✓ درواقع دیتا کلاس‌ها ذاتا ظرفی هستن برای نگه‌داری داده‌ها، متدها در این نوع کلاس نقش بسیار کم‌رنگی ایفا می‌کنند یا حتی می‌توان گفت، هیچ نقشی ندارند. مگر این که کاربرد متدی به نگه‌داری یا تغییر داده‌ها مربوط باشد.
به هر حال می‌توان به سه نوع نوشتن دیتا کلاس‌ها اشاره کرد.

1- @dataclasses.dataclass (python +3.7)
2- collections.namedtuple (python +2.6)
3- typing.NamedTuple (python +3.6)


✓ کتاب مثال جالبی زده است، فرض کنید که ما صرفا می‌خواهیم کلاسی تحت عنوان Coordinate تعریف کنیم که مختصات را در خود ذخیره کند.
class Coordinate:
    def __init__(self, lat, lon):
        self.lat = lat
        self.lon = lon

✓ این کلاس به راحتی قابل تعریف بود، اما ایراداتی را دارد که در ادامه به بیان آن‌ها خواهیم پرداخت. به کد زیر دقت کنید.
moscow = Coordinate(55.76, 37.62)
location = Coordinate(55.76, 37.62)
✓ دقت شود که مختصات جفت این ها یکسان است ولی وقتی  با == دو لوکیشن را مقایسه می‌کنیم به نتیجه دلخواه نخواهیم رسید زیرا مکان آن دو در حافظه درحال مقایسه است.

>>> location == moscow
False
>>> moscow
<coordinates.Coordinate object at 0x107142f10>

✓ پس دو مشکل اصلی را در حال نظاره‌ایم، یکی این که مجیک متد __repr__  را باید بازنویسی کنیم و به بازنویسی مجیک متد __eq__ نیز نیازمندیم. در ادامه از  اولین نوع دیتا کلاس استفاده خواهیم کرد. به کد زیر دقت کنید.
from dataclasess import dataclass 

@dataclass(frozen=True)
class Coordinate:
    lat: float
    lon: float

moscow = Coordinate(lat= 55.76, lon= 37.62 )
location = Coordinate(lat= 55.76, lon= 37.62 )

دقت شود که این نوع دیتا کلاس از تایپ هینت برای تعریف خود استفاده می‌کند و تایپ هینت یک نوع نوشتن آپشنال و اختیاری است و به هیچ عنوان قرار هم نیست که اجباری شود و فقط یک استثنا دارد آن هم دیتا کلاس است که باید در آن این Annotation رعایت گردد.

✓ مقدار frozen برابر True قرار داده شده، تا کلاس ایجاد شده immutable شود.

✓ نکته‌ی دیگری که باید در نظر گرفت، بهتر است که آرگومان‌های ورودی به صورت keyword only به دیتا کلاس برای ایجاد شیٔ داده شود زیرا ترتیب آرگومان‌های ورودی اینجا اهمیت دارد.
مشکلاتی که در تعریف قبلی کلاس Coordinate  به آن اشاره کردیم، در تعریف جدید به لطف باهوش بودن سازندگان پایتون حل شده است. کد زیر خود موضوع را روشن می‌کند.
>>>moscow == location 
True
>>>moscow
Coordinate(lat= 55.76, lon= 37.62 )

یعنی دو مجیک متد ذکر شده برای دیتاکلاس ما از پیش تعریف شده است.
@lython

BY روزمرگی های یک برنامه نویس


Share with your friend now:
tgoop.com/lython/66

View MORE
Open in Telegram


Telegram News

Date: |

Telegram desktop app: In the upper left corner, click the Menu icon (the one with three lines). Select “New Channel” from the drop-down menu. For crypto enthusiasts, there was the “gm” app, a self-described “meme app” which only allowed users to greet each other with “gm,” or “good morning,” a common acronym thrown around on Crypto Twitter and Discord. But the gm app was shut down back in September after a hacker reportedly gained access to user data. The group also hosted discussions on committing arson, Judge Hui said, including setting roadblocks on fire, hurling petrol bombs at police stations and teaching people to make such weapons. The conversation linked to arson went on for two to three months, Hui said. The group’s featured image is of a Pepe frog yelling, often referred to as the “REEEEEEE” meme. Pepe the Frog was created back in 2005 by Matt Furie and has since become an internet symbol for meme culture and “degen” culture.
from us


Telegram روزمرگی های یک برنامه نویس
FROM American