Python calls special methods when you use built-in operations on your own objects. len(batch) delegates to len, an if condition can call bool, and a set needs a consistent pair of equality and hashing methods. These methods let a domain object explain what those operations mean without changing its callers.
Keep the meaning narrow. A rack can delegate indexing to its stored list and inherit negative indexes naturally. A ready batch needs a different truth rule from a plain list: it must contain work and every item must be ready. You will implement these contracts and check empty collections, repeated values, and separate objects that represent the same ticket.