A Simple & Effective Way To Improve Python Class Performance

SdĂ­let
VloĆŸit
  • čas pƙidĂĄn 8. 07. 2024
  • There's a very simple way to improve Python performance of your code. And you know what's so nice about this performance improvement? It also nudges you to use good Python software design practices - it's a win-win!
    The code I worked on in this episode is available here: github.com/ArjanCodes/2022-slots.
    💡 Get my FREE 7-step guide to help you consistently design great software: arjancodes.com/designguide.
    đŸ’» ArjanCodes Blog: www.arjancodes.com/blog
    🎓 Courses:
    The Software Designer Mindset: www.arjancodes.com/mindset
    The Software Designer Mindset Team Packages: www.arjancodes.com/sas
    The Software Architect Mindset: Pre-register now! www.arjancodes.com/architect
    Next Level Python: Become a Python Expert: www.arjancodes.com/next-level...
    The 30-Day Design Challenge: www.arjancodes.com/30ddc
    🛒 GEAR & RECOMMENDED BOOKS: kit.co/arjancodes.
    🎓 Sign up to Brilliant now and get 20% off the annual subscription: brilliant.sjv.io/arjancodes.
    👍 If you enjoyed this content, give this video a like. If you want to watch more of my upcoming videos, consider subscribing to my channel!
    💬 Discord: discord.arjan.codes
    🐩Twitter: / arjancodes
    🌍LinkedIn: / arjancodes
    đŸ•”Facebook: / arjancodes
    👀 Code reviewers:
    - Yoriz
    - Ryan Laursen
    - Sybren A. StĂŒvel
    - Dale Hagglund
    đŸŽ„ Video edited by Mark Bacskai: / bacskaimark
    🔖 Chapters:
    0:00 Intro
    0:50 How classes work in Python
    2:00 Descriptors
    2:46 Basic class example with the dict dunder method
    3:53 Using slots
    5:02 Slots performance test
    6:07 Using slots with dataclasses
    7:19 Slots performance test #2 (with dataclasses)
    8:00 Why are slots not used by default?
    8:39 Slots limitation: mixins and multiple inheritance
    10:23 Slots limitation: dynamic attributes
    11:25 Final thoughts
    #arjancodes #softwaredesign #python
    DISCLAIMER - The links in this description might be affiliate links. If you purchase a product or service through one of those links, I may receive a small commission. There is no additional charge to you. Thanks for supporting my channel so I can continue to provide you with free content each week!

Komentáƙe • 205

  • @ArjanCodes
    @ArjanCodes  Pƙed 9 měsĂ­ci +1

    💡 Get my FREE 7-step guide to help you consistently design great software: arjancodes.com/designguide.

  • @cychoboy
    @cychoboy Pƙed 2 lety +64

    Slots can also help you avoid certain types of bugs. For instance person.addres = "abc" becomes an error because "address" was misspelled. Vanilla classes will accept this input without any error leaving you to figure out why the address field wasn't changed as intended.

    • @foji-video
      @foji-video Pƙed 2 lety +5

      that I think is actually the main advantage when building serious applications

    • @lawrencedoliveiro9104
      @lawrencedoliveiro9104 Pƙed 2 lety +2

      If you have read/write properties on a class, specifying slots is a very good idea.

    • @SkyOceanNet
      @SkyOceanNet Pƙed rokem +1

      I actually had that error inside my code for such a long time undiscovered. Recently I found it while reforming the code. Now I'm using slots and it can prevent that kind of mistakes. Thanks to Arjan and Edmunds!

  • @artyomvancyan2000
    @artyomvancyan2000 Pƙed 2 lety +119

    It is nice to see new videos about python but it's coming unactual more as there are a bunch of video curses about python. I very like your videos about project architecture and the unique code examples that you were using. I would really like to see in your channel videos about UML diagrams, project file structure, documenting packages and modules, design patterns that you haven't talked about them yet, etc. Thanks for your job.

    • @PeterSeres
      @PeterSeres Pƙed 2 lety +24

      I second the opinion that the most interesting videos are that teach us how to reduce coupling in the code by using design patterns and how to make python projects that are scalable.

    • @hanabimock5193
      @hanabimock5193 Pƙed 2 lety +2

      Totally agree on that. Also if performance is a problem, just avoid python.

    • @ArjanCodes
      @ArjanCodes  Pƙed 2 lety +20

      Thanks & no worries - there will definitely be more of those videos in the future.

    • @jacksonarnold27
      @jacksonarnold27 Pƙed 2 lety +1

      Yes!! Project structure, program flow design, design patterns, etc would be great!! Same with UML stuff, I’d love some in depth videos on any of these

  • @Mr1995Musicman
    @Mr1995Musicman Pƙed 2 lety +18

    This is a great feature. Dynamic members is like loose typing: it sounds great as a beginner developer, but as a more experienced developer it's more often a headache

    • @arpitkumar4525
      @arpitkumar4525 Pƙed 2 měsĂ­ci

      Even as a experienced dev, dynamic attributes and pretty much non existent boilerplate code seriously helps in prototyping or testing out risky features(risky in terms of feasibility). But other than that of course these should be avoided like the plague

  • @Sam-qn6hl
    @Sam-qn6hl Pƙed 2 lety +39

    Amazed that nobody has questioned using the lower bound rather than an average metric, or plotting the distribution of the different runs. It's not clear that a lower minimum translates into general better performance in most cases, especially a "20%" difference.
    Having said that, this was an interesting video. Might run some of those tests myself.

    • @isaacwolf2806
      @isaacwolf2806 Pƙed 2 lety +3

      Same thing I was thinking! Typically I like to see min, mean, and max.
      And if I'm trying to convince a coworker my way is better then I just take the best one. 😁

    • @fjolublar
      @fjolublar Pƙed 2 lety

      the lower minimum is the most accurate measurement to take

    • @rafarios50
      @rafarios50 Pƙed 2 lety +5

      @@fjolublar why is it the most accurate?

  • @chaddrobertson5805
    @chaddrobertson5805 Pƙed 2 lety +1

    I was recently told about slots on an SO question that I'd answered, and was quite confused by the concept until now. This was a fantastic explanation - thank you!
    A big +1 for touching on inheritance (was my largest concern as I was watching).

  • @henrikholland1730
    @henrikholland1730 Pƙed 2 lety

    Great video as always. Love the new studio set up.

  • @q2kq885
    @q2kq885 Pƙed 2 lety +1

    Dataclass is truly a powerful structure in python. I'm really looking forward to learning more tips and tricks to make the python code faster. This tutorial is helpful. Thanks a lot!

  • @_.gray._
    @_.gray._ Pƙed 2 lety +2

    Loving the new setup! This explains slots really well, and I might just remember to use them next time I write a class haha.

  • @obsidiansiriusblackheart
    @obsidiansiriusblackheart Pƙed 2 lety

    This is such a fantastic video and the fact that it's completely free is astounding!

  • @Swissfonk
    @Swissfonk Pƙed 2 lety +1

    Love your new Studio.

  • @willemvdk4886
    @willemvdk4886 Pƙed 2 lety

    Congrats on the new studio/office, Arjan! Looking good. Good to see the contents don't suffer the even better look. Still very informative! Love it.
    Kappertje gepakt trouwens?

  • @EngHassanIbraheem1998
    @EngHassanIbraheem1998 Pƙed 2 lety

    You have a fantastic skill in choosing topics. Keep it up.

  • @fuadpalchayev7269
    @fuadpalchayev7269 Pƙed 2 lety

    Thank you! Very informative👍

  • @CornishMiner
    @CornishMiner Pƙed 2 lety

    I'm liking the new setup Arjan. Super clear video and great sound.

  • @casperschutte2516
    @casperschutte2516 Pƙed 2 lety +2

    Thanks for the videos. They are always super interesting and very practical

  • @TechieGuy82
    @TechieGuy82 Pƙed 2 lety

    Superb as always. Thumbs up

  • @steshinanton
    @steshinanton Pƙed 2 lety

    The videos are amazing! I like the way you explain things. It is easy and fun to follow. I always find something useful even if I know the topic and recommend your videos to my colleagues because they are so informative.
    The way you present inspires me when I do my presentations.
    The new setup is very nice!

  • @Vdherrlichkeit
    @Vdherrlichkeit Pƙed 2 lety

    Again. Great content Arjan.
    Highly appreciated

  • @jakob1379
    @jakob1379 Pƙed 2 lety

    Nice video! A great way to better show the value of variables is with 'from rich import print'. It automatically highlights types and emphasizes structure.

  • @zacharyAbresch
    @zacharyAbresch Pƙed 2 lety

    Looking stellar mate, sharp looks to match yer words!

  • @anhnguyenuc6543
    @anhnguyenuc6543 Pƙed 2 lety

    Thanks for your video. That's really what I needed

  • @MaksimKupfer
    @MaksimKupfer Pƙed 2 lety

    Really insightful my friend, and great pace as well! Looking forward to following your content.

    • @ArjanCodes
      @ArjanCodes  Pƙed 2 lety

      Thank you Maxim, glad you liked the content!

  • @wowzers94
    @wowzers94 Pƙed 2 lety

    I dig the new set! And thanks as always for the python tips!

  • @heljhumenad
    @heljhumenad Pƙed 2 lety

    This is so much informative especially on perf of py classes

  • @sami3592
    @sami3592 Pƙed 2 lety

    Nice video. I also like your new setup. Your explanation of the topic always best. Thanks man.

  • @flightmansam
    @flightmansam Pƙed 2 lety

    Fantastic video. I’m gonna use slots for sure! Also yes, I love the new look. Enjoy your week!

  • @sasha297603ha
    @sasha297603ha Pƙed 2 lety

    Great new studio and very interesting topic. Well done

  • @mahmudulhassan9043
    @mahmudulhassan9043 Pƙed 2 lety

    Thank you very much . i love all of your tutorial . it helps me lot to improve my skill .

  • @davidlinesq
    @davidlinesq Pƙed 2 lety

    Love the new recording setup! Thanks for the content and hope you get to 100k subscribers soon.

  • @dhruvakashyap
    @dhruvakashyap Pƙed 2 lety

    Amazing new setup! Great video as always!

  • @nsontung
    @nsontung Pƙed rokem

    Thank you so much, Arjan, great lesson. It improved my code performance a lot.

  • @bryangalindo
    @bryangalindo Pƙed 2 lety +7

    Nice setups!! The changing light in the first setup was a little distracting, but the other setups were perfect. Also, thanks for sharing how slots work, its limitations, and providing a real-life example of a tool using slots. Very informative!

  • @pthube
    @pthube Pƙed 2 lety

    Thanks for sharing this cool feature

  • @ajflorido
    @ajflorido Pƙed 2 lety

    Cool video, a very good explanation indeed. And a really cool recording setup :D

  • @dqalombardi
    @dqalombardi Pƙed 2 lety

    I felt so certain that this was just going to be clickbait but honestly it just makes so much sense and I can't believe I didn't know about this before now.

  • @jonathanheadley2729
    @jonathanheadley2729 Pƙed 2 lety

    the setups are really nice! excellent work.

  • @Michael201078
    @Michael201078 Pƙed rokem

    Slots - very useful think. Thank you for the explanation.

  • @ivolol
    @ivolol Pƙed 2 lety

    I think you could add a translucent rectangle code graphic inset under the shelf light or something, on the left at 1:00 that could help show the code structure of the very things you're talking about, would work really well

  • @malteplath
    @malteplath Pƙed 2 lety +1

    I can see that you are proud of your new studio/office - and you should be!
    One aspect of inheritance with slots that you didn't mention, and that I am unsure about: how do you add new attributes in a class that inherits from a class with slots? Do you have to declare __slots__ again in the subclass?

  • @PedigreeGuitars
    @PedigreeGuitars Pƙed 2 lety

    Great video.
    Always learning with you. The new setup look great!!

  • @python_byte
    @python_byte Pƙed 2 lety

    Awesome, amazing way to create a well readable and secure code

  • @theherk
    @theherk Pƙed 2 lety

    Dang, That set looks superb.

  • @cryptosimon9529
    @cryptosimon9529 Pƙed 2 lety

    great setup!

  • @jpconstantineau
    @jpconstantineau Pƙed 2 lety +5

    Great video! I wonder if micropython and circuitpython support slots at all. Python on microcontrollers can use all the performance help and this is something most people wouldn't even know about.

  • @PawelOlas
    @PawelOlas Pƙed 2 lety

    the new backgrounds and cameras you use are very nice. pro!

  • @MagnusAnand
    @MagnusAnand Pƙed 2 lety

    Fantastic video!

  • @kenhaley4
    @kenhaley4 Pƙed 2 lety

    Very nice...as usual. It seems like another advantage of using slots would be to catch spelling errors in your classes' attribute names. For example, without slots, the statement myPerson.namee = "Joe" would work fine, but myPerson.name would not be affected. But using slots, the statement would raise an error:
    'Person' object has no attribute 'namee'
    which would let you find and fix the spelling error much sooner.

  • @jakesurrett3518
    @jakesurrett3518 Pƙed 2 lety +10

    Sweet new set! Just a little feedback: I would love to see a little bit of graphics/illustrations/diagrams sprinkled in the explain-to-camera sections. When there is a visual complement to the topic/explanation at hand I just can't help but feel more engaged in the discussion. Fireship on CZcams has mastered this technique in place of appearing on camera at all (which I'm certainly not suggesting). SciShow is another excellent example of this technique in action. I suppose news broadcasts had this figured out from the start. Anyhow, food for thought at least and thanks for another great python video.

    • @ArjanCodes
      @ArjanCodes  Pƙed 2 lety +1

      Thanks for the suggestion Jake, I agree that would be helpful!

  • @enigq
    @enigq Pƙed 2 lety +1

    May I just say that I love the graph monster in the background?

  • @dedekind1982
    @dedekind1982 Pƙed 2 lety

    Thanks! Find ways to keep delivering value like this. Thank you

  • @valenciawalker6498
    @valenciawalker6498 Pƙed rokem

    Thank you

  • @holographicsol2747
    @holographicsol2747 Pƙed rokem

    thank you that just helped a lot as i remembered watching this a while ago and came back to refresh my mem!

  • @gshan994
    @gshan994 Pƙed 2 lety +1

    I like dat you are trying to be like other youtubers wid d lights in BG n all.
    But i subscribed your channel solely for the knowledge u share.
    Yes, the setup is good, but honestly I loved your setup with a straight up facing camera.

  • @BartKevelham
    @BartKevelham Pƙed 2 lety

    Awesome new setup Arjan! If I'm very nitpicky (but that's not a thing I would ever be) then I'd say the programming view could use a bit of fill light for the right side of the face. But quite an awesome step up already.
    And besides that, another excellent video. Keep it up!

    • @ArjanCodes
      @ArjanCodes  Pƙed 2 lety +1

      Thanks Bart! I agree & it’s already fixed for the next batch 😊.

  • @vlntsolo
    @vlntsolo Pƙed rokem

    Thanks!

    • @ArjanCodes
      @ArjanCodes  Pƙed rokem

      Thank you Valentyn, glad you liked it!

  • @demasjaring5435
    @demasjaring5435 Pƙed 2 lety

    Awesome camera quality 👌

  • @lungenbrotchen
    @lungenbrotchen Pƙed 2 lety

    Thank you for your videos. I learned a lot from them and I also like the entertainment factor of your videos.

    • @ArjanCodes
      @ArjanCodes  Pƙed 2 lety

      Thank you so much - glad to hear the videos are helpful to you!

  • @ZeZa1515
    @ZeZa1515 Pƙed 2 lety

    Really liking the new setups! Your face in the coding setup had a lot of shadows on it though, so it wasn't very clear

  • @Hubert4515
    @Hubert4515 Pƙed 2 lety

    we love the new setup! :D

  • @unusedTV
    @unusedTV Pƙed 2 lety +4

    Audio has a bit more echo than in the past, in the first two setups. Coding setup is fine.

  • @AlexGb007
    @AlexGb007 Pƙed 2 lety

    Hey Arjan, congrats to your new setup! Looking forward to achieving 100k subs 👍

  • @niksen3300
    @niksen3300 Pƙed 2 lety +2

    Hey Arjan! I have been watching your videos and i have a question that i could not find a clear answer to. Is there a reason to NOT use dataclasses? It really seems to be the cleaner approach to managing and writing your classes but are there reasons to pick normal classes over them?
    Great content by the way! Loving your channel.

  • @Rebeljah
    @Rebeljah Pƙed 2 lety

    I like the new set!

  • @jimmyf.x.9526
    @jimmyf.x.9526 Pƙed rokem

    So amazing I want to use the f word! Fantastic!!!

  • @ardaakdere
    @ardaakdere Pƙed 2 lety

    Really cool and energetic also!

  • @MarcelSchliesser
    @MarcelSchliesser Pƙed 2 lety

    Danke!

  • @Rodrigo-rq1dx
    @Rodrigo-rq1dx Pƙed 2 lety +1

    The sofa set (0:54) has a lot of potential for you to add animations to explain what you're talking about. Like sketches/code snippets that illustrate.

    • @ArjanCodes
      @ArjanCodes  Pƙed 2 lety +1

      Good suggestion! I definitely want to explore animations to improve the clarity of the videos.

  • @christianforster3408
    @christianforster3408 Pƙed 2 lety +1

    Hi Arjan, love your videos! Just one little note. Wouldn't it be a better measure to use the average performance, than the minimal one? At least I'd be more interested in the average difference in performance ;) Cheers!

  • @djangodeveloper07
    @djangodeveloper07 Pƙed 2 lety

    high quality content about python on this Channel. No Doubt in it

    • @ArjanCodes
      @ArjanCodes  Pƙed 2 lety

      Thank you Ahmad, glad you like it!

  • @saeedgnu
    @saeedgnu Pƙed 7 měsĂ­ci

    In Go, you can "compose" several structs in a bigger struct, and get convinience of multiple inheritance, without inheritance at all. But in Python, sometimes the only way to make your class smaller is to use multiple inheritance. I think in some ways, Go is a better Python than Python (based on the Zen of Python).

  • @ThomasConrad
    @ThomasConrad Pƙed 2 lety

    Very informative. I honestly didn't know this. Free performance increases are the best performance increases.

    • @spell105
      @spell105 Pƙed 8 měsĂ­ci

      There is no such thing as a free lunch, it's worth knowing about the limitations of slots.

  • @burnere633
    @burnere633 Pƙed 2 lety +2

    h4X0r Arjan to corporate Arjan.
    Also changing lights in the background is a bit distracting.

  • @PracticalPillow
    @PracticalPillow Pƙed 2 lety +2

    Honestly, this is the first time I see slots, but I have a question. Does performance grow for get, set and delete evenly or some of them has a bigger contribution? Thanks you for the video!

  • @pedroazambuja132
    @pedroazambuja132 Pƙed 2 lety

    Damn looking good man 🕮

  • @ac130kz
    @ac130kz Pƙed 2 lety +2

    I think attrs is such an awesome thing, it is faster than dataclasses, has validation, extra features, and the slots are enabled by default!

  • @janHodle
    @janHodle Pƙed 2 lety

    Thank you! Your content belongs to the better ones here on CZcams!

  • @jimboppin2461
    @jimboppin2461 Pƙed 2 lety

    great vids, just heads up new sound is a little boxy/tinny 👍

  • @gshan994
    @gshan994 Pƙed 2 lety

    I mostly use python for aws cdk.
    And for architectural diagrams i use plant uml diagrams.

  • @SarcTiann
    @SarcTiann Pƙed 10 měsĂ­ci

    excellent explanation

    • @ArjanCodes
      @ArjanCodes  Pƙed 10 měsĂ­ci +1

      Glad it was helpful!

  • @callumfleming8662
    @callumfleming8662 Pƙed 2 lety

    Like number: 660 great video, didn't even know slots existed! thank you!

  • @jonathan3488
    @jonathan3488 Pƙed 2 lety

    Hi, great video. Does this work the same for private and protected attributes?

  • @shamaldesilva9533
    @shamaldesilva9533 Pƙed 2 lety

    Damnnnn that background đŸ€©đŸ‘đŸ‘đŸ‘

  • @johncongerton7046
    @johncongerton7046 Pƙed 8 měsĂ­ci

    The best tutor of all

    • @ArjanCodes
      @ArjanCodes  Pƙed 8 měsĂ­ci

      Thank you for the kind words, John!

  • @rajat971
    @rajat971 Pƙed 2 lety

    @arjan - Should we always user dataclasses even if we have a lot of business centric complex methods in the Class or should be only use dataclass for saving data in class and using simple get set methods?

  • @StevenMartinGuitar
    @StevenMartinGuitar Pƙed 2 lety +1

    The shirt seems a little formal :D but the new recording setup looks dope!

    • @ArjanCodes
      @ArjanCodes  Pƙed 2 lety

      Haha, yeah I thought let’s change things a bit for fun. Next time, back to hoodies & simple shirts 😁

  • @gheefop
    @gheefop Pƙed 2 lety

    no hoodie? Arjan I think this strapping professional has taken over your channel đŸ€Ł
    new sets look great

  • @newoptionz
    @newoptionz Pƙed rokem +1

    Thanks @ArjanCodes. Unfortunately I have not yet seen your free 7-step guide? I have signed up at the link you indicate and even purchased some of your courses by I haven't found this elusive guide, lol. Please help.

  • @JoaoSantos-lv4rc
    @JoaoSantos-lv4rc Pƙed 2 lety

    it is a cool setup. (imo)

  • @Claxiux
    @Claxiux Pƙed 2 lety

    Chief, that lights thing on your left is a bit distracting (setup 1). Thanks for the video!

  • @robertbrummayer4908
    @robertbrummayer4908 Pƙed 2 lety

    Hi Arjan, great video! I also like your new setup. However, as also other commented, the audio seems to be worse than before.

    • @ArjanCodes
      @ArjanCodes  Pƙed 2 lety +1

      Thanks! The audio could indeed be better, still have to tweak the new setup a bit, but we’ll get there.

  • @jusce17
    @jusce17 Pƙed 2 lety +1

    Performance wise,
    if we use data type when declaring variable (e.g a:int = 10), does it anyhow improve the performance ?

  • @ahmadkhaled4751
    @ahmadkhaled4751 Pƙed 2 lety

    Thank you Arjan for your brilliant content, I'm a fan of your Midlife-crisis looking thumbnails.

  • @castares
    @castares Pƙed 2 lety

    Good video, thank you for your content. But, shouldn’t you use mean instead of min when calculating performances? Those mins could be outliers

  • @marcioneto3016
    @marcioneto3016 Pƙed 2 lety

    The new setup is looking great! Great video, as usual.

  • @SuperGrimmy
    @SuperGrimmy Pƙed 8 měsĂ­ci

    After python 3.11 the benefits of using slots on performance is very low as far as I can see, but you are still saving memory. That's not a bad thing for object you create a lot of instances of.

  • @danzobisk2743
    @danzobisk2743 Pƙed 2 lety

    Hello any video about Python Guard clauses please

  • @MrDowntemp0
    @MrDowntemp0 Pƙed rokem

    Is it possible to use descriptors for validating attributes in a class that uses slots?

  • @philtoa334
    @philtoa334 Pƙed rokem

    Good.

  • @jorgealarconalvarez
    @jorgealarconalvarez Pƙed 2 lety

    Man the quality of your videos is amazing!
    Thank you so much, the content is so useful!

    • @ArjanCodes
      @ArjanCodes  Pƙed 2 lety

      Thank you, glad to hear the content is helpful!