def __getattr__(self, name):
        """It is not possible to create property bounded just to object
        and not class at runtime, therefore it is necessary to
        override __getattr__ and make fake 'properties' by storing them in
        the protected attribute _dynamic_attributes and returning result
        of the method associated with the specified attribute.

        This way the feeling of having regions accessed as 'properties'
        is created, which is one of the requirement of page object pattern.
        """
        try:
            return self._dynamic_properties[name]()
        except __HOLE__:
            msg = "'{0}' object has no attribute '{1}'"
            raise AttributeError(msg.format(type(self).__name__, name))

    # protected methods and classes
dataset/ETHPy150Open CiscoSystems/avos/openstack_dashboard/test/integration_tests/regions/baseregion.py/BaseRegion.__getattr__