diff --git a/python_3_oop/chapter06/extend_built-ins.py b/python_3_oop/chapter06/extend_built-ins.py new file mode 100644 index 0000000..08aa6dd --- /dev/null +++ b/python_3_oop/chapter06/extend_built-ins.py @@ -0,0 +1,44 @@ +from collections import KeysView, ItemsView, ValuesView + + +class SillyInt(int): + + def __add__(self, num): + return 0 + + +a = SillyInt(1) +b = SillyInt(2) +print("{} + {} = {}".format(a, b, a+b)) + + +class DictSorted(dict): + + def __new__(*args, **kwargs): + new_dict = dict.__new__(*args, **kwargs) + new_dict.ordered_keys = [] + return new_dict + + def __setitem__(self, key, value): + """self[key] = value syntax""" + if key not in self.ordered_keys: + self.ordered_keys.append(key) + super().__setitem__(key, value) + + def setdefault(self, key, value): + if key not in self.ordered_keys: + self.ordered_keys.append(key) + return super().setdefault(key, value) + + def keys(self): + return KeysView(self) + + def values(self): + return ValuesView(self) + + def items(self): + return ItemsView(self) + + def __iter__(self): + """for x in self syntax""" + return self.ordered_keys.__iter__() \ No newline at end of file