Fluent Python
- The Python Data Model
- An Array of Sequences
- Dictionaries and Sets
- Text versus Bytes
- First-Class Functions
- Design Patterns with First-Class Functions
- Function Decorators and Closures
- Object References, Mutability, and Recycling
- A Pythonic Object
- Sequence Hacking, Hashing, and Slicing
- Interfaces: From Protocols to ABCs
- Inheritance: For Good or For Worse
- Operator Overloading: Doing It Right
- Iterables, Iterators, and Generators
- Context Managers and else Blocks
- Coroutines
- Concurrency with Futures
- Concurrency with asyncio
- Dynamic Attributes and Properties
- Attribute Descriptors
- Class Metaprogramming
Special methods
Iterator
Collections
Attribute access
Operator overloading
Function and method invocation
Object creation and destruction
String representation and formatting
Managed contexts (i.e., with blocks)
Miscs
An nice way to create a list:
suits = 'spades diamonds clubs hearts'.split()
doctest makes your code self-testable
Special methods are very powerful beasts -- by just implementing len() and getitem(), your class becomes iterable, support slicing, etc