Python system interface lets user set properties that don't exist
The following should notify the user that system has no property thispropertydoesnotexist. Instead it quietly keeps going:

import espressomd._system as es
import espressomd

system = espressomd.System()
system.thispropertydoesnotexist = 0.001

diff --git a/src/python/espressomd/_system.pyx b/src/python/espressomd/_system.pyx
index c5bbb9a28..59fbaa5cf 100755
--- a/src/python/espressomd/_system.pyx
+++ b/src/python/espressomd/_system.pyx
@@ -39,12 +39,17 @@ setable_properties=["box_l","max_num_cells","min_num_cells",
                     "time_step","timings"]
 
 cdef class System:
+    # NOTE: every attribute has to be declared at the class level.
+    # This means that methods cannot define an attribute by using
+    # `self.new_attr = somevalue` without declaring it inside this
+    # indentation level, either as method, property or reference.
     doge = 1
     part = particle_data.ParticleList()
     non_bonded_inter = interactions.NonBondedInteractions()
     bonded_inter = interactions.BondedInteractions()
     cell_system = CellSystem()
     thermostat = Thermostat()
+    actors = None
 
     def __init__(self):
         self.actors = Actors(_system=self)
diff --git a/src/python/espressomd/system.py b/src/python/espressomd/system.py
index 49faed577..8abb900b3 100644
--- a/src/python/espressomd/system.py
+++ b/src/python/espressomd/system.py
@@ -8,3 +8,37 @@ class System(_system.System):
 
     def __init__(self):
         _system.System.__init__(self)
+
+    def __setattr__(self, name, value):
+        if hasattr(self, name):
+            super(System, self).__setattr__(name, value)
+        else:
+            raise AttributeError(
+                "System does not have the attribute " + name + "."
+                + "\nIf you know what you're doing, use "
+                + "system.create_attr()"
+            )
+
+    def create_attr(self, *args, **kwargs):
+        """
+        Circumvents the __setattr__ lock. Allows to create and set new
+        attributes to System instances.
+        For *args, it initializes an attribute with None value, if the
+        attribute does not already exist.
+        For **kwargs, it simply calls super().__setattr__.
+        """
+        for arg in args:
+            try: name = str(arg)
+            except ValueError:
+                print("Please pass either **kwargs or string *args to"
+                      + "create_attr()"
+                      )
+                continue
+
+            if hasattr(self, name):
+                print("Attribute " + name + " already exists.")
+            else:
+                super(System, self).__setattr__(name, None)
+
+        for name, value in kwargs.items():
+            super(System, self).__setattr__(name, value)
['src/python/espressomd/_system.pyx', 'src/python/espressomd/system.py']