diff -r ed4ffd602f4e Lib/ctypes/_endian.py --- a/Lib/ctypes/_endian.py Sun Aug 24 18:08:22 2014 -0500 +++ b/Lib/ctypes/_endian.py Mon Aug 25 12:37:47 2014 +0300 @@ -45,6 +45,7 @@ class BigEndianStructure(Structure, metaclass=_swapped_meta): """Structure with big endian byte order""" + __slots__ = () _swappedbytes_ = None elif sys.byteorder == "big": @@ -53,6 +54,7 @@ BigEndianStructure = Structure class LittleEndianStructure(Structure, metaclass=_swapped_meta): """Structure with little endian byte order""" + __slots__ = () _swappedbytes_ = None else: diff -r ed4ffd602f4e Lib/ctypes/test/test_byteswap.py --- a/Lib/ctypes/test/test_byteswap.py Sun Aug 24 18:08:22 2014 -0500 +++ b/Lib/ctypes/test/test_byteswap.py Mon Aug 25 12:37:47 2014 +0300 @@ -22,6 +22,26 @@ setattr(bits, "i%s" % i, 1) dump(bits) + def test_slots(self): + class BigPoint(BigEndianStructure): + __slots__ = () + _fields_ = [("x", c_int), ("y", c_int)] + + class LowPoint(LittleEndianStructure): + __slots__ = () + _fields_ = [("x", c_int), ("y", c_int)] + + big = BigPoint() + little = LowPoint() + big.x = 4 + big.y = 2 + little.x = 2 + little.y = 4 + with self.assertRaises(AttributeError): + big.z = 42 + with self.assertRaises(AttributeError): + little.z = 24 + def test_endian_short(self): if sys.byteorder == "little": self.assertIs(c_short.__ctype_le__, c_short)