On 4 October 2017 at 17:02, Rhodri James <rho...@kynesim.co.uk> wrote: > Actually you can: > >>>> class Point: > ... __slots__ = ("x", "y") > ... def __init__(self, x, y): > ... self.x = x > ... self.y = y > ... def __str__(self): > ... return "({0},{1})".format(self.x, self.y) > ... >>>> p = Point(3,4) >>>> print(p) > (3,4) >>>> print(p.x) > 3 >>>> p.x = 7 >>>> print(p) > (7,4) >>>> p.z = 2 > Traceback (most recent call last): > File "<stdin>", line 1, in <module> > AttributeError: 'Point' object has no attribute 'z' > > I pretty much never bother to do this because (bart to the contrary) it > isn't useful if you're thinking in Pythonic terms, but it can be done pretty > easily.
Good point. I'd forgotten that - like you say, it's not common to want to constrain things to this level in idiomatic Python code. Paul -- https://mail.python.org/mailman/listinfo/python-list