48 lines
1.0 KiB
Python
48 lines
1.0 KiB
Python
from abc import abstractmethod, ABC
|
|
from typing import Union
|
|
|
|
from cpl_query.base.sequence_values import SequenceValues
|
|
|
|
|
|
class SequenceABC(ABC):
|
|
|
|
@abstractmethod
|
|
def __init__(self, t: type = None, values: Union[list, iter] = None):
|
|
ABC.__init__(self)
|
|
|
|
if t == any:
|
|
t = None
|
|
elif t is None and values is not None:
|
|
t = type(values[0])
|
|
|
|
self._type = t
|
|
self._values = SequenceValues(values, t)
|
|
|
|
def __len__(self):
|
|
return len(self._values)
|
|
|
|
def __iter__(self):
|
|
return iter(self._values)
|
|
|
|
def next(self):
|
|
return next(self._values)
|
|
|
|
def __next__(self):
|
|
return self.next()
|
|
|
|
def __repr__(self):
|
|
return f'<{type(self).__name__} {list(self).__repr__()}>'
|
|
|
|
@property
|
|
def type(self) -> type:
|
|
return self._type
|
|
|
|
def to_list(self) -> list:
|
|
r"""Converts :class: `cpl_query.base.sequence_abc.SequenceABC` to :class: `list`
|
|
|
|
Returns
|
|
-------
|
|
:class: `list`
|
|
"""
|
|
return [x for x in self]
|