action22k MetaPosition 10024
Михаил Авраменко, 441 группа MetaPosition 10189
t1class positioned(type):t1class positioned(type):
22
3    def __new__(mcls, name, bases, namespace):3    def __new__(mcls, name, bases, namespace):
4        annotations = namespace.get('__annotations__', {})4        annotations = namespace.get('__annotations__', {})
5        fields = list(annotations.keys())5        fields = list(annotations.keys())
66
7        def __init__(self, *args, **kwargs):7        def __init__(self, *args, **kwargs):
8            for i, field in enumerate(fields):8            for i, field in enumerate(fields):
9                if i < len(args):9                if i < len(args):
10                    setattr(self, field, args[i])10                    setattr(self, field, args[i])
11                elif field in kwargs:11                elif field in kwargs:
12                    setattr(self, field, kwargs[field])12                    setattr(self, field, kwargs[field])
13                elif field in namespace:13                elif field in namespace:
14                    setattr(self, field, namespace[field])14                    setattr(self, field, namespace[field])
15                else:15                else:
16                    raise TypeError(f'Missing value for {field}')16                    raise TypeError(f'Missing value for {field}')
1717
18        def __str__(self):18        def __str__(self):
19            return ' '.join((f'{field}={getattr(self, field)}' for field19            return ' '.join((f'{field}={getattr(self, field)}' for field
> in fields))> in fields))
20        namespace['__init__'] = __init__20        namespace['__init__'] = __init__
21        namespace['__str__'] = __str__21        namespace['__str__'] = __str__
22        namespace['__match_args__'] = tuple(fields)22        namespace['__match_args__'] = tuple(fields)
23        return super().__new__(mcls, name, bases, namespace)23        return super().__new__(mcls, name, bases, namespace)
Legends
Colors
 Added 
Changed
Deleted
Links
(f)irst change
(n)ext change
(t)op