A Simple & Effective Way To Improve Python Class Performance

2024 ж. 13 Мам.
98 207 Рет қаралды

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!

Пікірлер
  • 💡 Get my FREE 7-step guide to help you consistently design great software: arjancodes.com/designguide.

    @ArjanCodes@ArjanCodes7 ай бұрын
  • 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.

    @cychoboy@cychoboy2 жыл бұрын
    • that I think is actually the main advantage when building serious applications

      @foji-video@foji-video2 жыл бұрын
    • If you have read/write properties on a class, specifying slots is a very good idea.

      @lawrencedoliveiro9104@lawrencedoliveiro91042 жыл бұрын
    • 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!

      @SkyOceanNet@SkyOceanNet Жыл бұрын
  • 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).

    @chaddrobertson5805@chaddrobertson58052 жыл бұрын
  • 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.

    @artyomvancyan2000@artyomvancyan20002 жыл бұрын
    • 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.

      @PeterSeres@PeterSeres2 жыл бұрын
    • Totally agree on that. Also if performance is a problem, just avoid python.

      @hanabimock5193@hanabimock51932 жыл бұрын
    • Thanks & no worries - there will definitely be more of those videos in the future.

      @ArjanCodes@ArjanCodes2 жыл бұрын
    • 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

      @jacksonarnold27@jacksonarnold27 Жыл бұрын
  • Great video as always. Love the new studio set up.

    @henrikholland1730@henrikholland17302 жыл бұрын
  • Loving the new setup! This explains slots really well, and I might just remember to use them next time I write a class haha.

    @_.gray._@_.gray._2 жыл бұрын
  • 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!

    @steshinanton@steshinanton2 жыл бұрын
  • 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?

    @willemvdk4886@willemvdk48862 жыл бұрын
  • Looking stellar mate, sharp looks to match yer words!

    @zacharyAbresch@zacharyAbresch Жыл бұрын
  • Thanks for the videos. They are always super interesting and very practical

    @casperschutte2516@casperschutte25162 жыл бұрын
  • Nice video. I also like your new setup. Your explanation of the topic always best. Thanks man.

    @sami3592@sami35922 жыл бұрын
  • Thank you! Very informative👍

    @fuadpalchayev7269@fuadpalchayev72692 жыл бұрын
  • 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!

    @q2kq885@q2kq8852 жыл бұрын
  • Thank you very much . i love all of your tutorial . it helps me lot to improve my skill .

    @mahmudulhassan9043@mahmudulhassan90432 жыл бұрын
  • I'm liking the new setup Arjan. Super clear video and great sound.

    @CornishMiner@CornishMiner2 жыл бұрын
  • This is such a fantastic video and the fact that it's completely free is astounding!

    @obsidiansiriusblackheart@obsidiansiriusblackheart2 жыл бұрын
  • 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!

    @bryangalindo@bryangalindo2 жыл бұрын
  • You have a fantastic skill in choosing topics. Keep it up.

    @EngHassanIbraheem1998@EngHassanIbraheem19982 жыл бұрын
  • Really insightful my friend, and great pace as well! Looking forward to following your content.

    @MaksimKupfer@MaksimKupfer2 жыл бұрын
    • Thank you Maxim, glad you liked the content!

      @ArjanCodes@ArjanCodes2 жыл бұрын
  • Fantastic video. I’m gonna use slots for sure! Also yes, I love the new look. Enjoy your week!

    @flightmansam@flightmansam2 жыл бұрын
  • Again. Great content Arjan. Highly appreciated

    @Vdherrlichkeit@Vdherrlichkeit2 жыл бұрын
  • Great new studio and very interesting topic. Well done

    @sasha297603ha@sasha297603ha2 жыл бұрын
  • Thanks for your video. That's really what I needed

    @anhnguyenuc6543@anhnguyenuc65432 жыл бұрын
  • This is so much informative especially on perf of py classes

    @heljhumenad@heljhumenad2 жыл бұрын
  • 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.

    @jakob1379@jakob13792 жыл бұрын
  • I dig the new set! And thanks as always for the python tips!

    @wowzers94@wowzers942 жыл бұрын
  • Cool video, a very good explanation indeed. And a really cool recording setup :D

    @ajflorido@ajflorido2 жыл бұрын
  • Love the new recording setup! Thanks for the content and hope you get to 100k subscribers soon.

    @davidlinesq@davidlinesq2 жыл бұрын
    • Thanks David!

      @ArjanCodes@ArjanCodes2 жыл бұрын
  • Thank you so much, Arjan, great lesson. It improved my code performance a lot.

    @nsontung@nsontung Жыл бұрын
    • Glad you liked it!

      @ArjanCodes@ArjanCodes Жыл бұрын
  • Love your new Studio.

    @Swissfonk@Swissfonk2 жыл бұрын
  • Slots - very useful think. Thank you for the explanation.

    @Michael201078@Michael201078 Жыл бұрын
  • Great video. Always learning with you. The new setup look great!!

    @PedigreeGuitars@PedigreeGuitars2 жыл бұрын
    • Thank you Pedro!

      @ArjanCodes@ArjanCodes2 жыл бұрын
  • Amazing new setup! Great video as always!

    @dhruvakashyap@dhruvakashyap2 жыл бұрын
    • Thank you!

      @ArjanCodes@ArjanCodes2 жыл бұрын
  • Superb as always. Thumbs up

    @TechieGuy82@TechieGuy82 Жыл бұрын
  • Thanks for sharing this cool feature

    @pthube@pthube2 жыл бұрын
  • the setups are really nice! excellent work.

    @jonathanheadley2729@jonathanheadley27292 жыл бұрын
    • Thank you Jonathan!

      @ArjanCodes@ArjanCodes2 жыл бұрын
  • 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.

    @jpconstantineau@jpconstantineau2 жыл бұрын
  • thank you that just helped a lot as i remembered watching this a while ago and came back to refresh my mem!

    @holographicsol2747@holographicsol2747 Жыл бұрын
    • Glad to hear you found it helpful!

      @ArjanCodes@ArjanCodes Жыл бұрын
    • @@ArjanCodes awesome

      @holographicsol2747@holographicsol2747 Жыл бұрын
  • 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

    @ivolol@ivolol2 жыл бұрын
  • Thank you for your videos. I learned a lot from them and I also like the entertainment factor of your videos.

    @lungenbrotchen@lungenbrotchen2 жыл бұрын
    • Thank you so much - glad to hear the videos are helpful to you!

      @ArjanCodes@ArjanCodes2 жыл бұрын
  • 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!

    @BartKevelham@BartKevelham2 жыл бұрын
    • Thanks Bart! I agree & it’s already fixed for the next batch 😊.

      @ArjanCodes@ArjanCodes2 жыл бұрын
  • 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.

    @dqalombardi@dqalombardi2 жыл бұрын
  • Hey Arjan, congrats to your new setup! Looking forward to achieving 100k subs 👍

    @alilee4505@alilee45052 жыл бұрын
    • Thank you Ali!

      @ArjanCodes@ArjanCodes2 жыл бұрын
  • Awesome, amazing way to create a well readable and secure code

    @python_byte@python_byte2 жыл бұрын
  • 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?

    @malteplath@malteplath2 жыл бұрын
  • Thanks! Find ways to keep delivering value like this. Thank you

    @dedekind1982@dedekind19822 жыл бұрын
    • Thank you, will do!

      @ArjanCodes@ArjanCodes2 жыл бұрын
  • 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.

    @Sam-qn6hl@Sam-qn6hl2 жыл бұрын
    • 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. 😁

      @isaacwolf2806@isaacwolf28062 жыл бұрын
    • the lower minimum is the most accurate measurement to take

      @fjolublar@fjolublar2 жыл бұрын
    • @@fjolublar why is it the most accurate?

      @rafarios50@rafarios502 жыл бұрын
  • the new backgrounds and cameras you use are very nice. pro!

    @PawelOlas@PawelOlas2 жыл бұрын
    • Thanks Pawel!

      @ArjanCodes@ArjanCodes2 жыл бұрын
  • 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 KZhead 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.

    @jakesurrett3518@jakesurrett35182 жыл бұрын
    • Thanks for the suggestion Jake, I agree that would be helpful!

      @ArjanCodes@ArjanCodes2 жыл бұрын
  • 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

    @ZeZa1515@ZeZa15152 жыл бұрын
  • Dang, That set looks superb.

    @theherk@theherk2 жыл бұрын
  • great setup!

    @cryptosimon9529@cryptosimon95292 жыл бұрын
  • 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

    @Mr1995Musicman@Mr1995Musicman2 жыл бұрын
    • 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

      @arpitkumar4525@arpitkumar452522 күн бұрын
  • 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.

    @kenhaley4@kenhaley42 жыл бұрын
  • May I just say that I love the graph monster in the background?

    @enigq@enigq2 жыл бұрын
  • 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.

    @gshan994@gshan9942 жыл бұрын
  • 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.

    @niksen3300@niksen3300 Жыл бұрын
  • Fantastic video!

    @MagnusAnand@MagnusAnand2 жыл бұрын
  • The new setup is looking great! Great video, as usual.

    @marcioneto3016@marcioneto30162 жыл бұрын
  • Thank you Arjan! I using classes in a raspberry pi 4 to perform face tracking with 2 servo motors. Since I am using python 3.9 with no slots attributes for dataclasses, I am using the classical class definition with slots. Unfortunately I couldn't see any improvements. Without using classes or functions I've got an incredible FPS rate. I've tried to switch to python 3.10 using pyenv and venv. Unfortunately I am facing some dependency problems with a library (libcam) that is installed with apt-get install instead of pip3. So I cannot run the program with python3. 10 to test performance. Maybe you have a good hint here for solving this dependency issue. Thx

    @kalagecko77@kalagecko779 ай бұрын
  • Hi, great video. Does this work the same for private and protected attributes?

    @jonathan3488@jonathan34882 жыл бұрын
  • So amazing I want to use the f word! Fantastic!!!

    @jimmyf.x.9526@jimmyf.x.9526 Жыл бұрын
  • we love the new setup! :D

    @Hubert4515@Hubert45152 жыл бұрын
    • Thanks!

      @ArjanCodes@ArjanCodes2 жыл бұрын
  • Awesome camera quality 👌

    @demasjaring5435@demasjaring5435 Жыл бұрын
    • Thank you!

      @ArjanCodes@ArjanCodes Жыл бұрын
  • great vids, just heads up new sound is a little boxy/tinny 👍

    @jimboppin2461@jimboppin24612 жыл бұрын
  • 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.

    @newoptionz@newoptionz Жыл бұрын
  • 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!

    @christianforster3408@christianforster34082 жыл бұрын
  • Thank you

    @valenciawalker6498@valenciawalker6498 Жыл бұрын
  • Really cool and energetic also!

    @ardaakdere@ardaakdere2 жыл бұрын
  • Man the quality of your videos is amazing! Thank you so much, the content is so useful!

    @jorgealarconalvarez@jorgealarconalvarez2 жыл бұрын
    • Thank you, glad to hear the content is helpful!

      @ArjanCodes@ArjanCodes2 жыл бұрын
  • no hoodie? Arjan I think this strapping professional has taken over your channel 🤣 new sets look great

    @gheefop@gheefop2 жыл бұрын
  • Very informative. I honestly didn't know this. Free performance increases are the best performance increases.

    @ThomasConrad@ThomasConrad2 жыл бұрын
    • There is no such thing as a free lunch, it's worth knowing about the limitations of slots.

      @spell105@spell1056 ай бұрын
  • I like the new set!

    @Rebeljah@Rebeljah2 жыл бұрын
  • Thanks!

    @vlntsolo@vlntsolo Жыл бұрын
    • Thank you Valentyn, glad you liked it!

      @ArjanCodes@ArjanCodes Жыл бұрын
  • Damn looking good man 🕴

    @pedroazambuja132@pedroazambuja1322 жыл бұрын
  • @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?

    @rajat971@rajat9712 жыл бұрын
  • Chief, that lights thing on your left is a bit distracting (setup 1). Thanks for the video!

    @Claxiux@Claxiux2 жыл бұрын
  • 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!

    @PracticalPillow@PracticalPillow2 жыл бұрын
  • I mostly use python for aws cdk. And for architectural diagrams i use plant uml diagrams.

    @gshan994@gshan9942 жыл бұрын
  • Like number: 660 great video, didn't even know slots existed! thank you!

    @callumfleming8662@callumfleming86622 жыл бұрын
  • excellent explanation

    @SarcTiann@SarcTiann8 ай бұрын
    • Glad it was helpful!

      @ArjanCodes@ArjanCodes8 ай бұрын
  • Audio has a bit more echo than in the past, in the first two setups. Coding setup is fine.

    @unusedTV@unusedTV2 жыл бұрын
  • Good video, thank you for your content. But, shouldn’t you use mean instead of min when calculating performances? Those mins could be outliers

    @castares@castares2 жыл бұрын
  • high quality content about python on this Channel. No Doubt in it

    @djangodeveloper07@djangodeveloper072 жыл бұрын
    • Thank you Ahmad, glad you like it!

      @ArjanCodes@ArjanCodes2 жыл бұрын
  • Thank you! Your content belongs to the better ones here on KZhead!

    @janHodle@janHodle2 жыл бұрын
  • Performance wise, if we use data type when declaring variable (e.g a:int = 10), does it anyhow improve the performance ?

    @jusce17@jusce172 жыл бұрын
  • Hi Arjan, great video! I also like your new setup. However, as also other commented, the audio seems to be worse than before.

    @robertbrummayer4908@robertbrummayer49082 жыл бұрын
    • Thanks! The audio could indeed be better, still have to tweak the new setup a bit, but we’ll get there.

      @ArjanCodes@ArjanCodes2 жыл бұрын
  • Damnnnn that background 🤩👏👏👏

    @shamaldesilva9533@shamaldesilva95332 жыл бұрын
    • Glad you like it!

      @ArjanCodes@ArjanCodes2 жыл бұрын
  • 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.

    @Rodrigo-rq1dx@Rodrigo-rq1dx2 жыл бұрын
    • Good suggestion! I definitely want to explore animations to improve the clarity of the videos.

      @ArjanCodes@ArjanCodes2 жыл бұрын
  • Hello any video about Python Guard clauses please

    @danzobisk2743@danzobisk27432 жыл бұрын
  • Is it possible to use descriptors for validating attributes in a class that uses slots?

    @MrDowntemp0@MrDowntemp0 Жыл бұрын
  • The shirt seems a little formal :D but the new recording setup looks dope!

    @StevenMartinGuitar@StevenMartinGuitar2 жыл бұрын
    • Haha, yeah I thought let’s change things a bit for fun. Next time, back to hoodies & simple shirts 😁

      @ArjanCodes@ArjanCodes2 жыл бұрын
  • What about the case when we will have a list object as a slot? Does that make sens?

    @Burbinox@Burbinox7 ай бұрын
  • Wasn't able to replicate this example using python 3.10.4, for some reason TypeError: dataclass() got an unexpected keyword argument 'slots' and TypeError: unsupported operand type(s) for |: 'type' and 'type' ~ from the get_set_delete function

    @TehCannonMan@TehCannonMan2 жыл бұрын
  • Danke!

    @MarcelSchliesser@MarcelSchliesser2 жыл бұрын
    • Thank you, Marcel!

      @ArjanCodes@ArjanCodes2 жыл бұрын
  • it is a cool setup. (imo)

    @JoaoSantos-lv4rc@JoaoSantos-lv4rc2 жыл бұрын
  • I think attrs is such an awesome thing, it is faster than dataclasses, has validation, extra features, and the slots are enabled by default!

    @ac130kz@ac130kz2 жыл бұрын
    • What is attrs?

      @nocodenoblunder6672@nocodenoblunder66722 жыл бұрын
  • Thank you Arjan for your brilliant content, I'm a fan of your Midlife-crisis looking thumbnails.

    @ahmadkhaled4751@ahmadkhaled47512 жыл бұрын
  • h4X0r Arjan to corporate Arjan. Also changing lights in the background is a bit distracting.

    @burnere633@burnere6332 жыл бұрын
  • Hello Arjan, great video as always! I would like to ask you. I want to use the super initialyzer in a child class. That is something achievable using dataclasses? Should I explicitly declare the __init__ method? If this is the case, I will lost the syntactic sugar of using dataclasses. Thank you so much!

    @matiaszulberti9996@matiaszulberti99962 жыл бұрын
    • Hi Matias, what you can do is add a dunder post_init method to your child data class and call super from there. That way, you can still let dataclass generate the init method.

      @ArjanCodes@ArjanCodes2 жыл бұрын
    • @@ArjanCodes Thank you so much for replaying. Your videos are super enjoyable and a great inspiration for me.

      @matiaszulberti9996@matiaszulberti99962 жыл бұрын
KZhead