Last active
August 7, 2022 21:22
-
-
Save ruda/49d2601e8d09fe73be504e8a9a792beb to your computer and use it in GitHub Desktop.
Namespace implementations found in Python 3.7 standard library.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# One-line Namespace | |
class Namespace: pass | |
# types.SimpleNamespace | |
# https://github.com/python/cpython/blob/main/Objects/namespaceobject.c | |
class SimpleNamespace: | |
def __init__(self, /, **kwargs): | |
self.__dict__.update(kwargs) | |
def __repr__(self): | |
items = (f"{k}={v!r}" for k, v in self.__dict__.items()) | |
return "{}({})".format(type(self).__name__, ", ".join(items)) | |
def __eq__(self, other): | |
if isinstance(self, SimpleNamespace) and isinstance(other, SimpleNamespace): | |
return self.__dict__ == other.__dict__ | |
return NotImplemented | |
# multiprocessing/dummy/__init__.py | |
# multiprocessing/managers.py | |
class Namespace(object): | |
def __init__(self, **kwds): | |
self.__dict__.update(kwds) | |
def __repr__(self): | |
items = list(self.__dict__.items()) | |
temp = [] | |
for name, value in items: | |
if not name.startswith('_'): | |
temp.append('%s=%r' % (name, value)) | |
temp.sort() | |
return '%s(%s)' % (self.__class__.__name__, ', '.join(temp)) | |
# argparse.py | |
class _AttributeHolder(object): | |
"""Abstract base class that provides __repr__. | |
The __repr__ method returns a string in the format:: | |
ClassName(attr=name, attr=name, ...) | |
The attributes are determined either by a class-level attribute, | |
'_kwarg_names', or by inspecting the instance __dict__. | |
""" | |
def __repr__(self): | |
type_name = type(self).__name__ | |
arg_strings = [] | |
star_args = {} | |
for arg in self._get_args(): | |
arg_strings.append(repr(arg)) | |
for name, value in self._get_kwargs(): | |
if name.isidentifier(): | |
arg_strings.append('%s=%r' % (name, value)) | |
else: | |
star_args[name] = value | |
if star_args: | |
arg_strings.append('**%s' % repr(star_args)) | |
return '%s(%s)' % (type_name, ', '.join(arg_strings)) | |
def _get_kwargs(self): | |
return sorted(self.__dict__.items()) | |
def _get_args(self): | |
return [] | |
class Namespace(_AttributeHolder): | |
"""Simple object for storing attributes. | |
Implements equality by attribute names and values, and provides a simple | |
string representation. | |
""" | |
def __init__(self, **kwargs): | |
for name in kwargs: | |
setattr(self, name, kwargs[name]) | |
def __eq__(self, other): | |
if not isinstance(other, Namespace): | |
return NotImplemented | |
return vars(self) == vars(other) | |
def __contains__(self, key): | |
return key in self.__dict__ |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment