Book Image

Mastering Python 2E - Second Edition

By : Rick van Hattem
5 (1)
Book Image

Mastering Python 2E - Second Edition

5 (1)
By: Rick van Hattem

Overview of this book

Even if you find writing Python code easy, writing code that is efficient, maintainable, and reusable is not so straightforward. Many of Python’s capabilities are underutilized even by more experienced programmers. Mastering Python, Second Edition, is an authoritative guide to understanding advanced Python programming so you can write the highest quality code. This new edition has been extensively revised and updated with exercises, four new chapters and updates up to Python 3.10. Revisit important basics, including Pythonic style and syntax and functional programming. Avoid common mistakes made by programmers of all experience levels. Make smart decisions about the best testing and debugging tools to use, optimize your code’s performance across multiple machines and Python versions, and deploy often-forgotten Python features to your advantage. Get fully up to speed with asyncio and stretch the language even further by accessing C functions with simple Python calls. Finally, turn your new-and-improved code into packages and share them with the wider Python community. If you are a Python programmer wanting to improve your code quality and readability, this Python book will make you confident in writing high-quality scripts and taking on bigger challenges
Table of Contents (21 chapters)
19
Other Books You May Enjoy
20
Index

Decorating class functions

Decorating class functions is very similar to regular functions, but you need to be aware of the required first argument, self—the class instance. You have most likely already used a few class function decorators. The classmethod, staticmethod, and property decorators, for example, are used in many different projects. To explain how all this works, we will build our own versions of the classmethod, staticmethod, and property decorators. First, let’s look at a simple decorator for class functions to demonstrate the difference from regular decorators:

>>> import functools

>>> def plus_one(function):
...     @functools.wraps(function)
...     def _plus_one(self, n, *args):
...         return function(self, n + 1, *args)
...
...     return _plus_one

>>> class Adder(object):
...     @plus_one
...     def add(self, a, b=0):
...         return a + b

>>> adder = Adder()
>>> adder.add(0)
1
>&gt...