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: |

But a Telegram statement also said: "Any requests related to political censorship or limiting human rights such as the rights to free speech or assembly are not and will not be considered." In the “Bear Market Screaming Therapy Group” on Telegram, members are only allowed to post voice notes of themselves screaming. Anything else will result in an instant ban from the group, which currently has about 75 members. The visual aspect of channels is very critical. In fact, design is the first thing that a potential subscriber pays attention to, even though unconsciously. To delete a channel with over 1,000 subscribers, you need to contact user support Add the logo from your device. Adjust the visible area of your image. Congratulations! Now your Telegram channel has a face Click “Save”.!
from us


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