MCPcopy
hub / github.com/fluentpython/example-code-2e / __new__

Method __new__

24-class-metaprog/metabunch/pre3.6/bunch.py:8–38  ·  view source on GitHub ↗
(meta_cls, cls_name, bases, cls_dict)

Source from the content-addressed store, hash-verified

6 return collections.OrderedDict()
7
8 def __new__(meta_cls, cls_name, bases, cls_dict):
9 def __init__(self, **kw):
10 for k in self.__defaults__:
11 setattr(self, k, self.__defaults__[k])
12 for k in kw:
13 setattr(self, k, kw[k])
14
15 def __repr__(self):
16 rep = ['{}={!r}'.format(k, getattr(self, k))
17 for k in self.__defaults__
18 if getattr(self, k) != self.__defaults__[k]
19 ]
20 return '{}({})'.format(cls_name, ', '.join(rep))
21
22 new_dict = { '__slots__':[],
23 '__defaults__':collections.OrderedDict(),
24 '__init__':__init__, '__repr__':__repr__, }
25
26 for k in cls_dict:
27 if k.startswith('__') and k.endswith('__'):
28 if k in new_dict:
29 warnings.warn(
30 "Can't set attr {!r} in bunch-class {!r}".
31 format(k, cls_name))
32 else:
33 new_dict[k] = cls_dict[k]
34 else:
35 new_dict['__slots__'].append(k)
36 new_dict['__defaults__'][k] = cls_dict[k]
37
38 return super().__new__(meta_cls, cls_name, bases, new_dict)
39
40class Bunch(metaclass=MetaBunch):
41 pass

Callers

nothing calls this directly

Calls 1

appendMethod · 0.45

Tested by

no test coverage detected