Problem: How to create a Python object in a single line of code? And how can you associate custom properties to this object in the same line?
Example: Say, you want to do something like this pseudocode snippet:
var newObject = new({'property' : 'value' }) newObject.property # returns 'value'
However, you cannot do the same in Python because this would create a dictionary:
new_object = {'property': 'value'} new_object.property # raises an AttributeError
This raises an AttributeError
because there’s no attribute property
associated to the dictionary object. To access the dictionary key in this case, you must use the syntax new_object['property']
.
So, how to create an inline Python object with attributes in a single line of Python code?
Here’s a quick overview of our three methods:
Exercise: Do all three methods produce the same output? Run the code to test it!
Let’s dive into each of those methods in greater detail!
Method 1: Use Python’s built-in type() function
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 build a new object with attributes in a single line of code:
obj = type('obj', (object,), {'property': 'value'})
Let’s see how we can access the attribute property of the newly-created object:
>>> obj <class '__main__.obj'> >>> obj.property 'value'
It works! The created class has an associated attribute property
that is set to the 'value'
.
However, this is not an instance (or object), yet. It’s only a class definition. To actually create an instance, you must use the following method with a trailing pair of parentheses.
obj = type('obj', (object,), {'property': 'value'})()
Now, you can create an arbitrary number of instances.
Method 2: Lambda Function Without Return Value + Dynamic Attributes
The second method is less clean—it’s more a hack—but it work beautifully! The idea is to create an anonymous function using the lambda keyword and associate the desired attributes right afterwards:
>>> obj = lambda: None >>> obj.property = 'value' >>> obj.property 'value'
You can also one-linerize this by using the semicolon:
obj = lambda: None; obj.property = 'value'
This achieves the desired result and uses only a single line of Python code!
Method 3: Use Named Tuples From Collections Module
You can also use named tuples from the collections module.
from collections import namedtuple obj = namedtuple('obj', ['property'])('value') print(obj.property)
The resulting output is the property value 'value'
.
- The first part of the expression
namedtuple('obj', ['property'])
enables you to create new object using theobj(...)
constructor. - The second part of the expression associates the string
'value'
to the tuple attribute'property'
.
Where to Go From Here?
Enough theory. Let’s get some practice!
Coders get paid six figures and more because they can solve problems more effectively using machine intelligence and automation.
To become more successful in coding, solve more real problems for real people. That’s how you polish the skills you really need in practice. After all, what’s the use of learning theory that nobody ever needs?
You build high-value coding skills by working on practical coding projects!
Do you want to stop learning with toy projects and focus on practical code projects that earn you money and solve real problems for people?
🚀 If your answer is YES!, consider becoming a Python freelance developer! It’s the best way of approaching the task of improving your Python skills—even if you are a complete beginner.
If you just want to learn about the freelancing opportunity, feel free to watch my free webinar “How to Build Your High-Income Skill Python” and learn how I grew my coding business online and how you can, too—from the comfort of your own home.