Welcome, guest | Sign In | My Account | Store | Cart

functools.partial could not only applied to functions it also works with classes. This opens some interesting perspectives, like on-the-fly creation of class adapters, as the following code illustrates.

Python, 49 lines
 ``` 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49``` ```from collections import namedtuple Point = namedtuple('Point', 'x, y') POINTS = ( Point(610, 102), Point(253, 241), Point(341, 446), Point(357, 42), Point(153 ,336), Point(203, 125), Point(306, 492), Point(335, 57), Point(38, 400), Point(191, 357), # and many, many more points. ) print POINTS ## ## Ok, we decided 3D is way cooler. ## But only a few points have a z coordinate != 0. ## Point = namedtuple('Point', 'x, y z') ## ## The solution is quite simple. ## Our on-the-fly partial adapter! ## from functools import partial Point = partial(Point, z = 0) POINTS = ( Point(610, 102), Point(253, 241), Point(341, 446, z = 23), # But, however, our defaults have to be specified as keyword arguments. # Otherwise we got a complaint: # TypeError: __new__() got multiple values for keyword argument 'z' Point(357, 42), Point(153 ,336, z = 11), Point(203, 125), Point(306, 492, z = 42), Point(335, 57), Point(38, 400, z = 47), Point(191, 357), ) print POINTS ```
 Created by Christoph Schueler on Thu, 29 May 2014 (MIT)