1st August 2022
Coding⚑
Python⚑
Python Snippets⚑
-
New: Initialize a dataclass with kwargs.
If you care about accessing attributes by name, or if you can't distinguish between known and unknown arguments during initialisation, then your last resort without rewriting
__init__
(which pretty much defeats the purpose of using dataclasses in the first place) is writing a@classmethod
:from dataclasses import dataclass from inspect import signature @dataclass class Container: user_id: int body: str @classmethod def from_kwargs(cls, **kwargs): # fetch the constructor's signature cls_fields = {field for field in signature(cls).parameters} # split the kwargs into native ones and new ones native_args, new_args = {}, {} for key, value in kwargs.items(): if key in cls_fields: native_args[key] = value else: new_args[key] = value # use the native ones to create the class ... ret = cls(**native_args) # ... and add the new ones by hand for new_key, new_value in new_args.items(): setattr(ret, new_key, new_value) return ret
Usage:
params = {'user_id': 1, 'body': 'foo', 'bar': 'baz', 'amount': 10} Container(**params) # still doesn't work, raises a TypeError c = Container.from_kwargs(**params) print(c.bar) # prints: 'baz'
-
New: Replace a substring of a string.
txt = "I like bananas" x = txt.replace("bananas", "apples")
Operating Systems⚑
Linux⚑
Linux Snippets⚑
-
New: Scan a physical page in Linux.
Install
xsane
and run it.
Pipx⚑
-
New: Introduce pipx.
Pipx is a command line tool to install and run Python applications in isolated environments.
Very useful not to pollute your user or device python environments.
Install it with: