diff --git a/lofar_station_client/devices.py b/lofar_station_client/devices.py
index 5603a7a790a60746f1c265f0c7d9c2f8379bdf13..aac73f1b8f89f2c859c5f5fd42f9450b8116ad1f 100644
--- a/lofar_station_client/devices.py
+++ b/lofar_station_client/devices.py
@@ -8,6 +8,7 @@ import numpy
 from tango import DeviceProxy
 from tango import ExtractAs
 
+
 class LofarDeviceProxy(DeviceProxy):
     """A LOFAR-specific tango.DeviceProxy that provides
     a richer experience."""
@@ -20,10 +21,14 @@ class LofarDeviceProxy(DeviceProxy):
 
     @lru_cache()
     def get_attribute_shape(self, name):
-        # "format" property describes actual dimensions as a tuple (x, y, z, ...),
-        # so reshape the value accordingly.
+        """Get the shape of the requested attribute, as a tuple."""
+
         config = self.get_attribute_config(name)
+
         if config.format and config.format[0] == "(":
+            # For >2D arrays, the "format" property describes actual
+            # the dimensions as a tuple (x, y, z, ...),
+            # so reshape the value accordingly.
             shape = ast.literal_eval(config.format)
         elif config.max_dim_y > 0:
             # 2D array
@@ -61,7 +66,9 @@ class LofarDeviceProxy(DeviceProxy):
             value = numpy.array(value)
 
             if value.shape != shape:
-                raise ValueError(f"Invalid shape. Given: {value.shape} Expected: {shape}")
+                raise ValueError(
+                    f"Invalid shape. Given: {value.shape} Expected: {shape}"
+                )
 
             if len(shape) > 2:
                 # >2D arrays collapse into 2D
diff --git a/tests/test_devices.py b/tests/test_devices.py
index 22ecb3adff749f73cbcef52fcb4b9f6da1eeaf64..ed90eaaf8cacd387ac22b406fc8983a3a0cedc9c 100644
--- a/tests/test_devices.py
+++ b/tests/test_devices.py
@@ -17,22 +17,12 @@ class MyDevice(Device):
         access=AttrWriteType.READ_WRITE,
     )
 
-    scalar = attribute(
-        dtype=bool,
-        access=AttrWriteType.READ_WRITE
-    )
+    scalar = attribute(dtype=bool, access=AttrWriteType.READ_WRITE)
 
-    spectrum = attribute(
-        dtype=(bool,),
-        max_dim_x=2,
-        access=AttrWriteType.READ_WRITE
-    )
+    spectrum = attribute(dtype=(bool,), max_dim_x=2, access=AttrWriteType.READ_WRITE)
 
     image = attribute(
-        dtype=((bool,),),
-        max_dim_x=2,
-        max_dim_y=3,
-        access=AttrWriteType.READ_WRITE
+        dtype=((bool,),), max_dim_x=2, max_dim_y=3, access=AttrWriteType.READ_WRITE
     )
 
     def init_device(self):
@@ -77,7 +67,7 @@ class LofarDeviceProxyTest(base.TestCase):
     @classmethod
     def setUpClass(cls):
         # setting up the TestContext takes ~1 second, so do it only once
-        cls.context =  MultiDeviceTestContext(
+        cls.context = MultiDeviceTestContext(
             cls.TEST_DEVICE_INFO,
             process=True,
         )
@@ -107,23 +97,22 @@ class LofarDeviceProxyTest(base.TestCase):
     def test_read_image(self):
         value = self.proxy.image
 
-        self.assertEqual((3,2), value.shape)
+        self.assertEqual((3, 2), value.shape)
         self.assertEqual(numpy.bool_, type(value[0, 0]))
 
-
     def test_write_image(self):
         self.proxy.image = [[True, False]] * 3
 
     def test_write_3D_attribute_lists(self):
         self.proxy.A = [
-                [True, True, True, True],
-                [True, True, True, True],
-                [True, True, True, True],
-            ], [
-                [False, False, False, False],
-                [False, False, False, False],
-                [False, False, False, False],
-            ]
+            [True, True, True, True],
+            [True, True, True, True],
+            [True, True, True, True],
+        ], [
+            [False, False, False, False],
+            [False, False, False, False],
+            [False, False, False, False],
+        ]
 
     def test_write_3D_attribute_numpy(self):
         self.proxy.A = numpy.zeros((2, 3, 4), dtype=bool)