Stack Implementation in Python
Better to follow a common stack API

The common API for a stack:


push(item): add an item on the top of the stack and then return the item
pop(): remove the top item from the stack and return it


My objection is against what your methods return.
push returns a message, pop returns an (item, message) tuple.
If you think about it, the message is useless.
Users of this class would have to check the output of each call,
and evaluate success or failure using string comparison.
This is very weak.

Instead of using the return value to indicate success and failure,
it would be better to follow the common API,
and raise exceptions in case of failures. 
For example like this:

class EmptyStackError(Exception):
    def __init__(self):
        super().__init__("Stack is empty: cannot pop an empty stack")


class StackFullError(Exception):
    def __init__(self):
        super().__init__("Stack is full")


class stack():
    # ...

    def push(self, data):
        if self.isFull():
            raise StackFullError()
        self.data.append(data)
        return data

    def pop(self):
        if self.isEmpty():
            raise EmptyStackError()
        item = self.data[len(self.data) -1]
        del self.data[len(self.data) -1]
        return item


Python conventions

Follow PEP8, the official coding style guide of Python. For example:


The convention for class names is PascalCase, so stack should be Stack
The convention for method names is snake_case, so isFull should be is_full