Do you hate those lengthy class definitions with __init__
and too many whitespaces and newlines? Python One-Liners to the rescue! Luckily, you can create classes in a single line—and it can even be Pythonic to do so! Sounds too good to be true? Let’s dive right into it!
Problem: How to create a Python class in a single line of code?
Example: Say, you want to create a class Car
with two attributes speed
and color
. Here would be the lengthy definition:
class Car: def __init__(self, speed, color): self.speed = speed self.color = color porsche = Car(200, 'red') tesla = Car(220, 'silver') print(porsche.color) # red print(tesla.color) # silver
How do you do this in a single line of code?
Let’s have an overview first in our interactive Python shell:
Exercise: Create a third attribute seats
and initialize it for both the Tesla and the Porsche car!
Method 1: type()
The type(name, bases, dict)
function creates and returns a new object. It takes three arguments that allow you to customize the object:
name
: this is the class name of the new object. It becomes thename
attribute, so that you can useobject.name
to access the argument value.bases
: this is a tuple of one or more tuple values that defines the base classes. You can access the content via theobject.bases
attribute of the newly-created object.dict
: this is the namespace with class attributes and methods definitions. You can create custom attributes and methods here. In case, you want to access the values later, you can use theobject.__dict__
attribute on the newly-created object.
Here’s how you can use the type()
function to create a new Car
object porsche
:
# Method 1: type() # One-Liner porsche = type('Car', (object,), {'speed': 200, 'color': 'red'}) # Result print(porsche.color) # red
If you need to learn more about the type()
function, check out our related article.
Related Article: How to Create Inline Objects With Properties? [Python One-Liner]
The type()
function is little-known but very effective when it comes to creating object of various types. The only disadvantage is that you cannot reuse it—for example, to create another object. You’d need to use the same argument list to create a second object of the same type, which may be a bit tedious in some cases.
Method 2: Lambda Object + Dynamic Attributes
The lambda
keyword is usually used to create a new and anonymous function. However, in Python, everything is an object—even functions. Thus, you can create a function with return value None
and use it as a Car
object.
Then, you add two dynamic attributes speed
and color
to the newly created object. You can one-linerize everything by using the semicolon syntax to cram multiple lines of code into a single line. Here’s how the result looks like:
# Method 2: lambda + dynamic attributes # One-Liner tesla = lambda: None; tesla.speed = 200; tesla.color = 'silver' # Result print(tesla.color) # silver
This method is a bit unnatural—and I’d consider it the least-Pythonic among the ones discussed in this article. However, the next one is quite Pythonic!
Method 3: Named Tuples
There also is an exciting data type in the collections module: named tuples.
from collections import namedtuple # One-Liner tesla = namedtuple('Car', ['speed', 'color'])(200, 'silver') # Result print(tesla.speed, tesla.color) # 200 silver
The namedtuple object definition consists of two parts:
- The first part of the expression
namedtuple('Car', ['speed', 'color'])
creates a new object with two attributes given in the list. - The second part of the expression associates the string
'value'
to the tuple attribute'property'
.
This final method is efficient, clean, and concise—and it solves the problem to create a Python class in a single line of code because you can reuse your namedtuple “class” to create multiple instances if you want!
Python One-Liners Book: Master the Single Line First!
Python programmers will improve their computer science skills with these useful one-liners.
Python One-Liners will teach you how to read and write “one-liners”: concise statements of useful functionality packed into a single line of code. You’ll learn how to systematically unpack and understand any line of Python code, and write eloquent, powerfully compressed Python like an expert.
The book’s five chapters cover (1) tips and tricks, (2) regular expressions, (3) machine learning, (4) core data science topics, and (5) useful algorithms.
Detailed explanations of one-liners introduce key computer science concepts and boost your coding and analytical skills. You’ll learn about advanced Python features such as list comprehension, slicing, lambda functions, regular expressions, map and reduce functions, and slice assignments.
You’ll also learn how to:
- Leverage data structures to solve real-world problems, like using Boolean indexing to find cities with above-average pollution
- Use NumPy basics such as array, shape, axis, type, broadcasting, advanced indexing, slicing, sorting, searching, aggregating, and statistics
- Calculate basic statistics of multidimensional data arrays and the K-Means algorithms for unsupervised learning
- Create more advanced regular expressions using grouping and named groups, negative lookaheads, escaped characters, whitespaces, character sets (and negative characters sets), and greedy/nongreedy operators
- Understand a wide range of computer science topics, including anagrams, palindromes, supersets, permutations, factorials, prime numbers, Fibonacci numbers, obfuscation, searching, and algorithmic sorting
By the end of the book, you’ll know how to write Python at its most refined, and create concise, beautiful pieces of “Python art” in merely a single line.