def __getitem__(self, thing: Any) -> np.ndarray:
if type(thing) is slice or type(thing) is np.ndarray or type(thing) is int:<EOL><INDENT>am = AttributeManager(None, axis=self.axis)<EOL>for key, val in self.items():<EOL><INDENT>am[key] = val[thing]<EOL><DEDENT>return am<EOL><DEDENT>elif type(thing) is tuple:<EOL><INDENT>result: np.ndarray = None<EOL>for t in thing:<EOL><INDENT>if t in self.__dict__["<STR_LIT>"]:<EOL><INDENT>if result is None:<EOL><INDENT>result = self.__getattr__(t)<EOL><DEDENT>else:<EOL><INDENT>vals = self.__getattr__(t)<EOL>if vals.dtype != result.dtype:<EOL><INDENT>raise AttributeError(f"<STR_LIT>")<EOL><DEDENT>result = np.vstack((result, vals)).transpose()<EOL><DEDENT><DEDENT><DEDENT>if result is None:<EOL><INDENT>raise AttributeError(f"<STR_LIT>")<EOL><DEDENT>else:<EOL><INDENT>return result<EOL><DEDENT><DEDENT>else:<EOL><INDENT>return self.__getattr__(thing)<EOL><DEDENT>
Return a named attribute, or a slice through all the attributes

Args:
        thing:		if string, return the named attribute
                                if slice, np.ndarray or int, return a slice through all the attributes