Python dataclasses will save you HOURS, also featuring attrs

Поділитися
Вставка
  • Опубліковано 3 кві 2021
  • Get rid of boilerplate writing classes using dataclasses!
    In this video we learn about dataclasses and how to use them, as well as the related attrs library that dataclasses were based on.
    Note: As of Python 3.10 dataclasses DO support slots.
    ― mCoding with James Murphy (mcoding.io)
    Source code: github.com/mCodingLLC/VideosS...
    attrs library: www.attrs.org/en/stable/examp...
    SUPPORT ME ⭐
    ---------------------------------------------------
    Patreon: / mcoding
    Paypal: www.paypal.com/donate/?hosted...
    Other donations: mcoding.io/donate
    BE ACTIVE IN MY COMMUNITY 😄
    ---------------------------------------------------
    Discord: / discord
    Github: github.com/mCodingLLC/
    Reddit: / mcoding
    Facebook: / james.mcoding
  • Наука та технологія

КОМЕНТАРІ • 849

  • @patrickjdarrow
    @patrickjdarrow 3 роки тому +2563

    A "Production Python Code" course by you would be a hit. These are the things I never picked up as a mostly self taught programmer. Great stuff.

    • @mCoding
      @mCoding  3 роки тому +304

      Thanks!

    • @logankillen2669
      @logankillen2669 3 роки тому +62

      I also think this would be cool, but would be hard not making it too long while staying informative. It seems like many UA-cam channels favor having a 5 hour crash course. Beginners don’t have the attention span (imo) because they’ll have so many questions.

    • @johnr3936
      @johnr3936 3 роки тому +196

      @@logankillen2669 this isn't beginner content, it's intermediate content for programmers who want to improve.

    • @johnnybarrett3445
      @johnnybarrett3445 3 роки тому +158

      @@johnr3936 which are the hardest tutorials to find!

    • @flowers134
      @flowers134 3 роки тому +45

      This would be actually what I need ! Focus on real world professional prduction-code. Either to be better qualified for a job or to particiapate in big projects like pandas, numpy etc.

  • @eoghainlebioda1396
    @eoghainlebioda1396 3 роки тому +1191

    I love that you show WHY you would want to use this rather than just what it is. It really drives home the actual usefulness of this

    • @mCoding
      @mCoding  3 роки тому +159

      I think that's what's really the important part.

    • @alilee4505
      @alilee4505 3 роки тому +16

      Totally agree! Happy UA-cam recommend me your channel!

    • @parryhotter18
      @parryhotter18 Рік тому +5

      Thanks! The WHY is the part that is missing almost everywhere else. Subscribed and hoping for more :-)

    • @jeffreyhunter4115
      @jeffreyhunter4115 Рік тому +2

      Agree 100%

    • @QuintinMassey
      @QuintinMassey 7 місяців тому

      Agreed! Context matters.

  • @octopirate-bak
    @octopirate-bak 2 роки тому +152

    Update: as of python 3.10, slots are now supported in in-built dataclasses with the ``slots`` argument

  • @DSCuber
    @DSCuber 2 роки тому +71

    I don't think my jaw has ever dropped from a coding video before. The beauty of being an engineer is you learn something new every day. So much hidden utility in python its amazing!

  • @zishiwu7757
    @zishiwu7757 3 роки тому +78

    Thank you for this valuable video! Before watching your video, I assumed dataclasses were just a Python version of C structs, for cases where you didn't want to add functions in a class but didn't want a raw tuple either. After watching your video, I learned that dataclasses are much more sophisticated than that.

    • @mCoding
      @mCoding  3 роки тому +9

      Glad it was helpful!

  • @dhanushkari9042
    @dhanushkari9042 2 роки тому +57

    I have been looking for such tutorials (unique less known concepts for intermediate programmers) for years now. This channel is an absolute gem!
    Great work James!

    • @mCoding
      @mCoding  2 роки тому +5

      Thanks so much for your kind words!

  • @nicke20686
    @nicke20686 3 роки тому +212

    Best Python videos on youtube. Or maybe most valuable? Covering so many useful and unique topics no one else seems to.

    • @mCoding
      @mCoding  3 роки тому +23

      Wow, thanks!

    • @gagik1
      @gagik1 3 роки тому +3

      @@mCoding thank you very much for your videos. I know something new every video.

  • @stratfanstl
    @stratfanstl 2 роки тому +7

    I have just started experimenting with Python to use animation libraries from Grant Sanderson / 3Blue1Brown and have seen your videos pop up. Your organization and presentation of these tips is great for both initial learning and reference. Very concise, straightforward examples without cryptic foo / bar based variables, etc. New subscriber!

  • @xavierdingeldein9336
    @xavierdingeldein9336 3 роки тому +7

    As someone who has been slowly getting into the nitty gritty of writing classes, this video was informative, scary, and then relieving. Not only have you showed me what I have yet to learn, but also why it's something that should understood, but hopefully never written.

  • @vnpikachu4627
    @vnpikachu4627 3 роки тому +27

    I love the way you start by explaining and go to the solutions. Most people just start by showing what it does and how to do it, without ever mentioning why we really need it. Keep going, your style of teaching will reach millions of people.

  • @usharma1624
    @usharma1624 3 роки тому +149

    I'll remember this. I don't know much about OOP so I didn't understand much. When I'll learn, I'll re-watch this video.

    • @mCoding
      @mCoding  3 роки тому +37

      You don't need to know about OOP to understand classes! You are simply making your own class that holds an int and a str!

    • @vandelayindustries2971
      @vandelayindustries2971 3 роки тому +24

      @@mCoding Classes are the very basics of OOP. If you don't know about OOP, chances are you don't know how classes work either.

    • @mCoding
      @mCoding  3 роки тому +34

      You definitely need classes for OOP, but classes can be used for other programming paradigms besides OOP, though I guess you are right in that usually classes are introduced in the context of OOP.

    • @usharma1624
      @usharma1624 3 роки тому +4

      @@mCoding Yeah, I have seen classes used in programs, where no OOP was involved. In those programs, classes were used just to pack data into one structure. However, I've not seen @property, __hash__, or how to make them immutable so I thought they were covered in OOP.

    • @TheHippyHoppyHippo
      @TheHippyHoppyHippo 3 роки тому +2

      I strongly recommend that you learn Python and OOP immediately.

  • @grahamjoss4643
    @grahamjoss4643 3 роки тому +20

    Cool functionality. Thanks for sharing
    @ 3:32 the dead pan to the camera... Lol !
    Love the dry humor

  • @Julie9009
    @Julie9009 3 роки тому +3

    Thank you for introducing me to dataclasses! Using a dataclass has just considerably simplified a module that I'm working on right now.

  • @richardchin1545
    @richardchin1545 Рік тому +2

    Seen a few Python dataclasses videos but this one is the clearest and most informative in a short time. Well done!

  • @taylormallory8705
    @taylormallory8705 2 роки тому +2

    About 2 years ago I came over from writing bare C to having Python as my daily driver. I've grown to really enjoy the language. 95% of the time it suits my needs and videos like this just illustrate how absolutely brilliant it can be. Thanks for the new trick up my sleeve!!!

  • @ethanperry8
    @ethanperry8 2 роки тому +2

    Your vids are the perfect thing for me, I usually get lost in long videos. Yours are short, simple and actually demonstrate applications of it

    • @mCoding
      @mCoding  2 роки тому

      Great to hear!

  • @schneeekind
    @schneeekind 3 роки тому

    I am watching all your videos since a random youtube recommendation. Some of the best coding videos I have seen yet, very clear, easy to follow and often about topics and features I would never thought that I will benefit from. Thanks!

    • @mCoding
      @mCoding  3 роки тому

      Great to hear!

  • @ropro9817
    @ropro9817 2 роки тому +2

    These are really great videos! I'm just learning Python for work and they're extremely helpful with simple and clear explanations.

  • @carlesg0n
    @carlesg0n 3 роки тому +3

    Best video on dataclasses I have ever seen by far. Loved the approach of firstly doiny an example implementation, then showing the issues found, and finally solving them using the feature displayed.

    • @mCoding
      @mCoding  3 роки тому

      Awesome, thank you!

  • @mmartel
    @mmartel 3 роки тому +1

    Thanks for shining a spotlight on these very useful Python modules with a good, concise tutorial. Great comparison between attrs and dataclasses, too.

  • @d8-remy
    @d8-remy 3 роки тому +5

    This is the type of stuff classes should teach. I really appreciate your content.

  • @kelkka7
    @kelkka7 3 роки тому +4

    This is great! You do a great job of explaining these features. I always found classes to be annoying to deal with in Python and have stayed away from OOP because of that, but this approach might change my mind.

  • @jorgemfgoncalves
    @jorgemfgoncalves 2 роки тому +1

    Your videos have a high learning value and I, as well as many others, appreciate your effort in making coding content. Although most of the times I do not understand what you're talking about, obviously due to me being a beginner in programming (Python), I will make sure to keep some of the things in mind and come back here much later when I'm ready.

  • @williambos4410
    @williambos4410 3 роки тому +2

    Subbed to this channel at like 300 subs and now 2 weeks later you're at 12.3k. you're going places my dude, keep it up, great content

    • @mCoding
      @mCoding  3 роки тому +1

      Appreciate it!

  • @2fritazz
    @2fritazz 3 роки тому +11

    U got me with the “I just subscribed “ look lolol

  • @ciberman
    @ciberman Рік тому +1

    C# dev here learning python for my Software Engineering thesis. I love your videos, directly to the point and with a lot of useful information!

  • @anirangoncalvesbr
    @anirangoncalvesbr 2 роки тому +1

    Dataclasses are a beautiful idea, and hearing "There's gotta be a better way!" reminds me of Sir Raymond's classes. Great stuff 👍!

  • @kylefluto5384
    @kylefluto5384 3 роки тому +226

    I'm starting to realize how damn useful class and method decorators are. I have the cumbersome Learning Python book by Orielly but these videos offer a lot of value due to how terse they are. @cache and @dataclass all day baby

    • @mCoding
      @mCoding  3 роки тому +53

      Books actually contain a lot of useful stuff! Lucky for me I love reading terse literature (high signal-to-noise-ratio).

    • @maltml
      @maltml 3 роки тому +16

      ​@@mCoding Do you have some book recommendations?

    • @s.i.m.c.a
      @s.i.m.c.a 3 роки тому +10

      @@maltml the human brain tend to work in a way - that if you didn't use it, you will forgot it....thus reading the book without goal is just a waste of time. Better to lvl the skill in ability to search for information you actually needed and when you need it.
      It's like - i'm watching this vid; yep cool stuff, standard lib. But if you would have a hundreds of classes, transforming each via class decorator would eat performance on module load.

    • @narnbrez
      @narnbrez 2 роки тому

      don't diss lutz ;p

  • @bettercalldelta
    @bettercalldelta 3 роки тому

    What makes this video really useful is thay you show why you need it rather than what does it do.

  • @ChasmChaos
    @ChasmChaos 3 роки тому

    Your videos are extremely information rich, yet not "dense" in terms of accessibility of the ideas.

  • @bartugonulalan
    @bartugonulalan 2 роки тому +2

    LMAO That pause and eye contact after he read "I just subscribed". I FELT THE PRESSURE MAN!

    • @mCoding
      @mCoding  2 роки тому +1

      :D subliminal messaging

  • @HubertRozmarynowski
    @HubertRozmarynowski Рік тому

    Thanks for putting the time and effort to explain dataclasses thoroughly. You're the best!!

  • @addvert_br0009
    @addvert_br0009 3 роки тому +17

    This is actually one of the best CS-related channels I've watched

    • @aa-nw8hk
      @aa-nw8hk 3 роки тому

      But its not c sharp, its python

    • @addvert_br0009
      @addvert_br0009 3 роки тому +8

      @@aa-nw8hk CS = computer science

  • @travel.tales.official
    @travel.tales.official 20 днів тому

    Subscribed. Really great one. Will be following more of yours tutorials.

  • @mrdbourke
    @mrdbourke 3 роки тому +20

    Wow, this is an outstanding video! Thank you so much. I just found out you’ve got a Python course, I’m in

  • @rafael.beirigo
    @rafael.beirigo Рік тому

    Amazing video, love it! (loved the "hinting eye contact" @ 3:30 ;)

  • @cawinchan4282
    @cawinchan4282 3 роки тому +1

    Great stuff man! Im new to the channel but I've already learnt a lot from your videos! Keep churning out these high quality content!! :D

    • @mCoding
      @mCoding  3 роки тому

      Thanks! Will do!

  • @lordtejas9659
    @lordtejas9659 3 роки тому +3

    **Note: As of Python 3.10 data classes DO support slots.**
    Thanks for adding it to the description, this video is gold!

    • @mCoding
      @mCoding  3 роки тому +1

      Of course! Thanks for watching!

    • @lordtejas9659
      @lordtejas9659 3 роки тому

      @@mCoding It's been 3 hours and I am still watching your videos! I was just watching another video!

    • @mCoding
      @mCoding  3 роки тому +1

      👏😮 that means a lot, thanks! Glad you enjoy my videos so much!

  • @WhyNotProgram
    @WhyNotProgram Рік тому

    Good intermediate YT content is hard to come by, subbed! Amazing post 😁

  • @2Sor2Fig
    @2Sor2Fig 3 роки тому

    Really liked this. I'm building a library for Kivy-based apps that provides an interface for working with TastyPie on a Django-based server, and this is exactly what I need for storing information related to each model schema exposed through the API. So much simpler and readable. Always good to learn more about Python, thanks for the vid!

  • @thiamath
    @thiamath 3 роки тому +5

    This video gave me goosebumps...
    This feat is amazing!!!
    Great video! Very succint and useful!

    • @mCoding
      @mCoding  3 роки тому

      Thank you so much!

  • @mujeebishaque
    @mujeebishaque 2 роки тому

    This is the first video I've watched on this channel. I love this guy! Great work!

    • @mCoding
      @mCoding  2 роки тому +1

      Wow, thanks!

  • @constantfear
    @constantfear 2 роки тому

    When I first came across decorators and understood that the dectaror takes the function or class as an argument, I thought this will have so many uses. Data classes are gold

  • @paologhezzo4276
    @paologhezzo4276 3 роки тому

    This is the perfect intermediate to advanced python concepts I would like to see covered in a single comprehensive course. Your explanations are very punctual and I seem to really get a lot out of your videos. I am glad I found this channel. You should really consider, as others have suggested, to make such a course.

  • @johnnybarrett3445
    @johnnybarrett3445 3 роки тому

    Insanely clear and valuable tutorials dude! Subbed in a millisecond

  • @seasong7655
    @seasong7655 7 місяців тому

    I've just used these for my users in flask. Great explanation

  • @datenschauer
    @datenschauer Рік тому

    Wow. After this video I think I really got the gist of Python dataclasses. And so many ideas popped up in my head to refactor some code. Thanks a lot! 😃

  • @ksz7241
    @ksz7241 2 роки тому

    Great video, I just found your channel and it's great, congrats

  • @JohnZakaria
    @JohnZakaria 3 роки тому +3

    You never fail to amuse me.
    Didn't know that fields thing

  • @raymondzhao5644
    @raymondzhao5644 3 роки тому +1

    Wow, I commented and asked for a dataclass vid a week ago and you actually delivered. Nice :)

    • @mCoding
      @mCoding  3 роки тому +1

      Hope you enjoyed it!

  • @kasta867
    @kasta867 3 роки тому

    What a nice and clear explanation! I will try to implement this in my thesis project!

  • @richardme123
    @richardme123 3 роки тому

    This is really cool and I just learned that you can put decorators on classes :) thank you!! You have earned yourself a subscriber.

    • @mCoding
      @mCoding  3 роки тому +1

      Thanks for subbing!

  • @Khushpich
    @Khushpich 3 роки тому

    I've being doing python for a while now and a lot of things here are new to me. Thanks for making this

    • @mCoding
      @mCoding  3 роки тому

      Glad it was helpful!

  • @sanmeetsingh4538
    @sanmeetsingh4538 Рік тому

    That was soo awesome .. I saved a lot of time writing code for json responses ! Really awesome stuff 😁

  • @thatguy6664
    @thatguy6664 3 роки тому

    One of the best Python OOP videos I've ever seen. Thanks!!

    • @mCoding
      @mCoding  3 роки тому

      Glad it was helpful!

  • @dgnikon
    @dgnikon 3 роки тому +13

    I love that you called out the issue with __slots__
    The default dict instance representation has turned my implentation into a massive memory hog, tuple instance representation fixed that!
    Maybe __slots__ and other memory optimization and profiling techniques could be the topic of a future video!

    • @mCoding
      @mCoding  3 роки тому +2

      I'll cover slots eventually, but that's a more technical topic!

    • @Avicenna697
      @Avicenna697 3 роки тому

      I think NamedTuple from typing module used slots by default. Also seem to work with @property.

    • @lawrencedoliveiro9104
      @lawrencedoliveiro9104 3 роки тому

      I use slots to avoid typos. Particularly important if your class has writable properties.

    • @omgwtfafterparty
      @omgwtfafterparty Рік тому

      as for now, slots are available in dataclasses too (since python 3.10)

  • @jeffreyhunter4115
    @jeffreyhunter4115 Рік тому

    Very well explained. Thank you!

  • @fartzy
    @fartzy Рік тому

    wow bro this is amazing. Thanks for doing what you do man!

  • @anonyme103
    @anonyme103 2 роки тому

    Apart from the amazing video, you're acting skills are on point :D

  • @aidanfarhi367
    @aidanfarhi367 3 роки тому +3

    Very cool. I can see this saving alot of time. Python never ceases to surprise me

    • @mCoding
      @mCoding  3 роки тому +1

      I know it saves me a lot of time!

  • @kychemclass5850
    @kychemclass5850 Рік тому

    Higher than my current level, but when I get there, this will be even fantastic. THANK YOU !!!! :D

  • @AnyFactor
    @AnyFactor 3 роки тому +164

    The new mic has arrived!

    • @mCoding
      @mCoding  3 роки тому +32

      Indeed it has! Let me know if the audio quality sounds good or if I've messed something up!

    • @Wiedzmin940
      @Wiedzmin940 3 роки тому +8

      @@mCoding its perfect :)

    • @deViant14
      @deViant14 3 роки тому +5

      It sounds much better. Though it sounds like there's a little bit of reverb somehow

    • @toktik7576
      @toktik7576 3 роки тому +2

      @@mCoding Your voice sounds perfect, but you can hear some vibrations from keyboard sounds in the audio

    • @mCoding
      @mCoding  3 роки тому +11

      I actually left typing noises in on purpose because they sound satisfying... not sure if others agree or would rather not hear me clicking and clacking.

  • @therzook
    @therzook 3 роки тому +1

    as a beginner with some basic knowledge it is the content I started peeking in, some professional stuff that I can learn actually makes life much easier!

    • @mCoding
      @mCoding  3 роки тому

      Glad to peel back the curtain for you!

  • @amazed4778
    @amazed4778 Рік тому

    This is how a tutorial should be! Loved it 💕

  • @fahimulislam7331
    @fahimulislam7331 2 роки тому +1

    3:31 the pause and cold look after "I just subscribed" :D

  • @vighneshpp
    @vighneshpp Рік тому

    Wonderful video! Thanks a lot for this.

  • @tiiibo
    @tiiibo Рік тому +1

    that little pause at 3:30 made me subscribe 😂

  • @cosmicpuma1409
    @cosmicpuma1409 3 роки тому +1

    3m30... That is the new Deathstare!! Awesome, Subbed. Great vid and Mitch appreciated.

  • @fredericoamigo
    @fredericoamigo 2 роки тому

    Great vid! Keep up the good work!

  • @roniabraham9602
    @roniabraham9602 2 роки тому

    You have a very deep insight into the python source code

  • @icen9ne645
    @icen9ne645 3 роки тому +2

    To get the nice syntax using the `attrs` library, use `auto_attribs=True` in the decorator and you'll be able to get the same syntax ability of mixed defaults in `dataclass`.

  • @samtoya
    @samtoya 3 роки тому

    I'm hooked to this course bro, a huge thanks for this.

    • @mCoding
      @mCoding  3 роки тому

      No problem 👍

  • @itzblinkzy1728
    @itzblinkzy1728 3 роки тому

    Such high quality content thanks for this, you deserve more subs

    • @mCoding
      @mCoding  3 роки тому

      I appreciate that so much!

  • @FarazMazhar
    @FarazMazhar 3 роки тому

    Excellent and to the point. Subscribed.

  • @aqworldsmaster88
    @aqworldsmaster88 3 роки тому

    another banger, great work mcoding, you're the best

    • @mCoding
      @mCoding  3 роки тому +1

      I appreciate that!

  • @daniellapm8808
    @daniellapm8808 3 роки тому

    This is excellent. Subscribed.

  • @dexternepo
    @dexternepo 3 роки тому

    That's a fantastic feature! Thanks for making this great video

    • @mCoding
      @mCoding  3 роки тому +1

      And thank you for watching!

  • @poke_champ
    @poke_champ 3 роки тому

    Love this. Real-world implementations and uses

  • @DarkWizard316
    @DarkWizard316 Рік тому

    HOLY SHIT. Why didn't I just learn this ages ago? It's fantastic!

  • @Jaun_
    @Jaun_ 3 роки тому

    This was so detailed - great stuff !

    • @mCoding
      @mCoding  3 роки тому

      Glad you liked it!

  • @vasilnikolov8576
    @vasilnikolov8576 3 роки тому

    This is a very useful concept. Another great video!

  • @otesunki
    @otesunki 2 роки тому

    WHAAAAAA
    THIS HELPS SOOO MUCH WITH MY AST NODES
    THANK YOU SO MUCH

    • @mCoding
      @mCoding  2 роки тому +1

      You are very welcome 😊

  • @user-vx6zk5jj4e
    @user-vx6zk5jj4e 3 роки тому

    Nicely structured video.

  • @ShadartS
    @ShadartS 2 роки тому

    I love you, perfect video. Saved me a lot of time.

  • @vaishantsah
    @vaishantsah 3 місяці тому

    I am way too noob for this video but I'll watch it whole and watch it again after 6 months. Thanks!

  • @realrk95
    @realrk95 Рік тому

    Great content. I use pydantic but it’s good to learn the native way for this!

  • @Moody0101
    @Moody0101 3 роки тому

    Thank you so much, I used this in one of my projects and it is really useful :)

    • @mCoding
      @mCoding  3 роки тому +1

      Great to hear!

  • @cubbyhoo
    @cubbyhoo 3 роки тому

    Omg I just finished a Python OOP assesment at uni, where was this library! (I am also just stupidly happy I understood this video)
    I had all these issues so I will be using this in the future. Thanks so much, keep up the great work!

    • @mCoding
      @mCoding  3 роки тому +1

      Glad I could help!

  • @nhoover
    @nhoover 3 роки тому

    Great presentation! Thanks.

  • @amirh6712
    @amirh6712 3 роки тому +4

    So basically this is python's equivalent of lombok's @Data annotation in java and python supports this out of box
    Thanks for sharing it
    Your videos are amazing. You always get to the point without wasting any time

    • @mCoding
      @mCoding  3 роки тому +1

      Thanks for such kind words!

  • @TheSkyCries1
    @TheSkyCries1 3 роки тому +2

    I remember doing project for school in java where the professor didn't let you use any libraries, so if you wanted something to be comparable you had to type every thing out... my God. This brings tears to me eyes that dataclasses in pyton will automatically do all of that for you.

    • @ABaumstumpf
      @ABaumstumpf 3 роки тому +1

      Well - the professor did the right thing - get you to actually use the language.

  • @dominikprager5338
    @dominikprager5338 2 роки тому

    That 3:29 was hillariously sneaky! Good video btw

  • @seaniam
    @seaniam 3 роки тому

    I especially liked it - subscribed! thanks for the tips

    • @mCoding
      @mCoding  3 роки тому

      Awesome, thank you!

  • @diegowh
    @diegowh 6 місяців тому

    a perfect explanation, thank you

  • @laurieinjapan
    @laurieinjapan 3 роки тому +2

    Very useful video! Thanks!

    • @mCoding
      @mCoding  3 роки тому +2

      You're welcome!

  • @KingKringel16
    @KingKringel16 2 роки тому +3

    Cool and informational video! However, since I am still learning python and haven't written a lot of production code, I think it would've helped me to see more clearly where the limitations of dataclasses are. Can or should I just use them everywhere, if they are saving lots of time? When should I NOT use them?

  • @wolfisraging
    @wolfisraging 3 роки тому

    bro your channel's on fire... keep it up!!!

    • @mCoding
      @mCoding  3 роки тому

      Appreciate it! Spread the flame!

  • @MichalKoziatek
    @MichalKoziatek 3 роки тому

    This is amazing!! Why did I learn about it so late?!?! Thx for the video

    • @mCoding
      @mCoding  3 роки тому

      You're welcome!

  • @subhodeepsarkar7611
    @subhodeepsarkar7611 3 роки тому

    You're ON ANOTHER LEVEL ❤️

  • @behnamsalehi9765
    @behnamsalehi9765 3 роки тому

    That was a great video. Thank you❤️