Returns the value at the end of keypath (or None)
        keypath is a list of keys, e.g., ["key", "subkey", "subsubkey"]

def get_value_from_path(self, keypath):
        """
        Returns the value at the end of keypath (or None)
        keypath is a list of keys, e.g., ["key", "subkey", "subsubkey"]
        """
        if isinstance(keypath, list):
            if len(keypath) == 0:
                # empty list is root
                return 
            val = self 
            for next_key in keypath:
                val = val[next_key]
            return val
        else:
            return self.__dict__['p'][keypath]