Cool New Features in Python 3.11 (Summary)
A new release of Python is always cause for celebration, and acknowledgment of all the effort that’s been poured into the language by volunteers from all around the world.
In this video course, you’ve seen new features and improvements like:
- Better error messages with more informative tracebacks
- Faster code execution due to many efforts in the Faster CPython project
- Task and Exception groups that simplify working with asynchronous code
- Several new typing features improving Python’s static typing support
- Native TOML support for working with configuration files
You may not be able to take advantage of all the features right away. Still, you should strive to test your code on Python 3.11 to make sure your code is future ready. Do you notice any speed up? Share your experience in the comments below.
If you’d like to learn more about the concepts in this course, check out:
- Python 3.11 release notes
- PEP 617 - PEG Parser
- Mark Shannon @ EuroPython 2022
- Brandt Bucher @ Talk Python
- Guido and Mark @ Talk Python
- Better Exceptions Library
- Friendly
- TOML specification
- tomli as a backport
- TOML Kit, for writing with style preservation
- Python and TOML: New Best Friends
- Async IO in Python: A Complete Walkthrough (tutorial)
- Async IO in Python: A Complete Walkthrough (course)
- Speed Up Your Python Program With Concurrency (tutorial)
- Speed Up Your Python Program With Concurrency (course)
- Python Type Checking (Guide) (tutorial)
- Python Type Checking (Guide) (course)
Congratulations, you made it to the end of the course! What’s your #1 takeaway or favorite thing you learned? How are you going to put your newfound skills to use? Leave a comment in the discussion section and let us know.
00:00 In the previous lesson, I showed you some odds and ends in the release, like suppressing negative zeros. This is the summary lesson. I’ll discuss whether you should upgrade, summarize what I’ve gone through, and point you at some further material in case you’re interested. This course was all about the new things in Python 3.11.
00:19 There was a big focus on making Python faster and, following on to Python 3.10, continued improvement on error messages. In this case, the tracebacks got better.
00:30
This release saw the addition of TOML to the standard library, the creation of exception groups, and the addition of notes to those same exceptions. I showed you the new task creation mechanisms for asyncio
and new additions to the typing
module.
00:49 To be or not to be? That’s the question, closely followed up by to do or not to do? Wa diddy diddy dum diddy do. Personally, I’ve found the improved error messages in Python 3.10 made a big difference in my coding and debugging.
01:04 I suspect the improvements to tracebacks in 3.11 will have a similar impact. And of course, speed improvements are always welcome. Overall, If you’ve got a good test suite for your software, I think it’s worth trying 3.11, and if nothing breaks, you’re probably good. As always with upgrades, your degree of risk is related to what you’re running and how fragile your system is. If you’ve got good tests, just do it.
01:29 For more information on the release, you can see the What’s New doc, or if you want to know more about the PEG parser that was introduced in 3.9, which is now fully being taken advantage of, you can see PEP 617.
01:44 These three talks from a variety of core developers discuss the speed improvements if you want to know more about how they were accomplished.
01:53 If you want to take your traceback and error output to the next level, there are two third-party libraries that you might be interested in, The Better Exceptions Library and Friendly. Both help you give better error information to your users. To learn more about TOML, you can see their spec. If you want to use TOML before 3.11, you can use tomli or TOML Kit.
02:18
Note that both of these use a slightly different interface than the 3.11 tomllib
, so you can’t just drop them in as replacements. TOML Kit as the added advantage of being able to write TOML as well as read it, and that includes style preservation.
02:35
If you’re looking for more Real Python content, this tutorial was part of the 3.11 preview series and goes into TOML in depth. Or if you want to learn more about asyncio
, this tutorial and companion course may be of interest.
02:50
If you want to dig into asyncio
as well as other parallel coding tools, this tutorial and course may be your thing. And finally, if you’d like to learn more about type hints in Python, this guide and course can point you along the way.
03:06 That’s it for what’s new in Python 3.11. I hope you found the course helpful. Thanks for your attention.
Geir Arne Hjelle RP Team on Oct. 26, 2022
Hi Marcin,
there are a bit more detail in the examples on realpython.com/python311-new-features/#improved-type-variables and realpython.com/python311-tomllib/#self-type.
As you note, you can use future annotations to add similiar hints without Self
. This works well, as long as your class is not subclassed. Consider this continuation of your example:
class MySubclass(MyClass): ...
The return-type of MySubclass.some_method()
is MyClass
according to the annotation. However, the method is returning self
which is a MySubclass
object instead. Self
will correctly handle this kinds of cases.
marcinszydlowski1984 on Oct. 27, 2022
Thank you Geir Arne,
I missed the links which you provided but now it’s clear and I see the purpose. However, when I do inherited classes, I create overloaded methods which return proper types and I didn’t even realized that the problem may occur in other situations.
Become a Member to join the conversation.
marcinszydlowski1984 on Oct. 26, 2022
Hello Christopher,
can you talk more about the “Self” keyword or put a better example of it? The official documentation just mention this but there’s no advanced examples. Is it just a syntactic sugar? The same effect we can get using the __future__ built-in package:
This works for every type of method, no matter it is an instance method (built-in or custom), @classmethod or @staticmethod.