def __mul__(self, other):
    if isinstance(other, (tuple, list)):
        other = Vector(*other)
    if isinstance(other, om.MVector):
        p = self.translation()
        q = self.quaternion()
        return (p + (q * other))
    elif isinstance(other, om.MMatrix):
        return type(self)((self.asMatrix() * other))
    elif isinstance(other, om.MTransformationMatrix):
        return type(self)((self.asMatrix() * other.asMatrix()))
    else:
        raise TypeError(("unsupported operand type(s) for *: '%s' and '%s'" % (type(self).__name__, type(other).__name__)))
def __mul__(self, other):
    if isinstance(other, (tuple, list)):
        other = Vector(*other)
    if isinstance(other, om.MVector):
        p = self.translation()
        q = self.quaternion()
        return (p + (q * other))
    elif isinstance(other, om.MMatrix):
        return type(self)((self.asMatrix() * other))
    elif isinstance(other, om.MTransformationMatrix):
        return type(self)((self.asMatrix() * other.asMatrix()))
    else:
        raise TypeError(("unsupported operand type(s) for *: '%s' and '%s'" % (type(self).__name__, type(other).__name__)))