diff options
| author | Raymond Hettinger <python@rcn.com> | 2008-02-21 22:11:37 +0000 | 
|---|---|---|
| committer | Raymond Hettinger <python@rcn.com> | 2008-02-21 22:11:37 +0000 | 
| commit | b3a65f8d19f55437406a446927238a9e6f7d3902 (patch) | |
| tree | c2f8e9d8e222595c153e8d7b38815cd7d1f056fb /Lib/collections.py | |
| parent | 6f7140c762710ee8412cb07e87194d1de087ce9b (diff) | |
| download | cpython-git-b3a65f8d19f55437406a446927238a9e6f7d3902.tar.gz | |
Move UserString to collections.
Removed decode() method.  Added isidentifier() and format() methods.
Drop MutableUserString class.
Diffstat (limited to 'Lib/collections.py')
| -rw-r--r-- | Lib/collections.py | 144 | 
1 files changed, 144 insertions, 0 deletions
diff --git a/Lib/collections.py b/Lib/collections.py index 93194e02bf..dafc5e5746 100644 --- a/Lib/collections.py +++ b/Lib/collections.py @@ -237,6 +237,150 @@ class UserList(MutableSequence):  ################################################################################ +### UserString +################################################################################ + +class UserString(Sequence): +    def __init__(self, seq): +        if isinstance(seq, str): +            self.data = seq +        elif isinstance(seq, UserString): +            self.data = seq.data[:] +        else: +            self.data = str(seq) +    def __str__(self): return str(self.data) +    def __repr__(self): return repr(self.data) +    def __int__(self): return int(self.data) +    def __long__(self): return int(self.data) +    def __float__(self): return float(self.data) +    def __complex__(self): return complex(self.data) +    def __hash__(self): return hash(self.data) + +    def __eq__(self, string): +        if isinstance(string, UserString): +            return self.data == string.data +        return self.data == string +    def __ne__(self, string): +        if isinstance(string, UserString): +            return self.data != string.data +        return self.data != string +    def __lt__(self, string): +        if isinstance(string, UserString): +            return self.data < string.data +        return self.data < string +    def __le__(self, string): +        if isinstance(string, UserString): +            return self.data <= string.data +        return self.data <= string +    def __gt__(self, string): +        if isinstance(string, UserString): +            return self.data > string.data +        return self.data > string +    def __ge__(self, string): +        if isinstance(string, UserString): +            return self.data >= string.data +        return self.data >= string + +    def __contains__(self, char): +        if isinstance(char, UserString): +            char = char.data +        return char in self.data + +    def __len__(self): return len(self.data) +    def __getitem__(self, index): return self.__class__(self.data[index]) +    def __add__(self, other): +        if isinstance(other, UserString): +            return self.__class__(self.data + other.data) +        elif isinstance(other, str): +            return self.__class__(self.data + other) +        return self.__class__(self.data + str(other)) +    def __radd__(self, other): +        if isinstance(other, str): +            return self.__class__(other + self.data) +        return self.__class__(str(other) + self.data) +    def __mul__(self, n): +        return self.__class__(self.data*n) +    __rmul__ = __mul__ +    def __mod__(self, args): +        return self.__class__(self.data % args) + +    # the following methods are defined in alphabetical order: +    def capitalize(self): return self.__class__(self.data.capitalize()) +    def center(self, width, *args): +        return self.__class__(self.data.center(width, *args)) +    def count(self, sub, start=0, end=_sys.maxsize): +        if isinstance(sub, UserString): +            sub = sub.data +        return self.data.count(sub, start, end) +    def encode(self, encoding=None, errors=None): # XXX improve this? +        if encoding: +            if errors: +                return self.__class__(self.data.encode(encoding, errors)) +            return self.__class__(self.data.encode(encoding)) +        return self.__class__(self.data.encode()) +    def endswith(self, suffix, start=0, end=_sys.maxsize): +        return self.data.endswith(suffix, start, end) +    def expandtabs(self, tabsize=8): +        return self.__class__(self.data.expandtabs(tabsize)) +    def find(self, sub, start=0, end=_sys.maxsize): +        if isinstance(sub, UserString): +            sub = sub.data +        return self.data.find(sub, start, end) +    def format(self, *args, **kwds): +        return self.data.format(*args, **kwds) +    def index(self, sub, start=0, end=_sys.maxsize): +        return self.data.index(sub, start, end) +    def isalpha(self): return self.data.isalpha() +    def isalnum(self): return self.data.isalnum() +    def isdecimal(self): return self.data.isdecimal() +    def isdigit(self): return self.data.isdigit() +    def isidentifier(self): return self.data.isidentifier() +    def islower(self): return self.data.islower() +    def isnumeric(self): return self.data.isnumeric() +    def isspace(self): return self.data.isspace() +    def istitle(self): return self.data.istitle() +    def isupper(self): return self.data.isupper() +    def join(self, seq): return self.data.join(seq) +    def ljust(self, width, *args): +        return self.__class__(self.data.ljust(width, *args)) +    def lower(self): return self.__class__(self.data.lower()) +    def lstrip(self, chars=None): return self.__class__(self.data.lstrip(chars)) +    def partition(self, sep): +        return self.data.partition(sep) +    def replace(self, old, new, maxsplit=-1): +        if isinstance(old, UserString): +            old = old.data +        if isinstance(new, UserString): +            new = new.data +        return self.__class__(self.data.replace(old, new, maxsplit)) +    def rfind(self, sub, start=0, end=_sys.maxsize): +        return self.data.rfind(sub, start, end) +    def rindex(self, sub, start=0, end=_sys.maxsize): +        return self.data.rindex(sub, start, end) +    def rjust(self, width, *args): +        return self.__class__(self.data.rjust(width, *args)) +    def rpartition(self, sep): +        return self.data.rpartition(sep) +    def rstrip(self, chars=None): +        return self.__class__(self.data.rstrip(chars)) +    def split(self, sep=None, maxsplit=-1): +        return self.data.split(sep, maxsplit) +    def rsplit(self, sep=None, maxsplit=-1): +        return self.data.rsplit(sep, maxsplit) +    def splitlines(self, keepends=0): return self.data.splitlines(keepends) +    def startswith(self, prefix, start=0, end=_sys.maxsize): +        return self.data.startswith(prefix, start, end) +    def strip(self, chars=None): return self.__class__(self.data.strip(chars)) +    def swapcase(self): return self.__class__(self.data.swapcase()) +    def title(self): return self.__class__(self.data.title()) +    def translate(self, *args): +        return self.__class__(self.data.translate(*args)) +    def upper(self): return self.__class__(self.data.upper()) +    def zfill(self, width): return self.__class__(self.data.zfill(width)) + + + +################################################################################  ### Simple tests  ################################################################################  | 
