2013-07-31 2 views
0

Постарайтесь, чтобы получить класс, который будет работать следующим образом:Доступа исходного значения строки Юникода, когда подклассы Юникода

>>> original = u"ABCD-123-foo" 
>>> suffix = SuffixComparingUnicodeString("foo") 
>>> suffix == original # if original ends with suffix, True 
True 

Я знаю, что это глупо. Пожалуйста, несите меня.

Во всяком случае, я не могу понять, как получить реальные, ээ, строку (не str, ум) из внутри unicode объекта. Я могу сделать это вот так:

>>> class SuffixComparingUnicodeString(unicode): 
...  def __init__(self, x): 
...   super(SuffixComparingUnicodeString, self).__init__(x) 
...   self._myval = x 
...  def __eq__(self, other): 
...   return isinstance(other, unicode) and other.endswith(self._myval) 
... 
>>> SuffixComparingUnicodeString("foo") == u"barfoo" 
True 

Как я могу это сделать, не сохраняя это значение самостоятельно? Что делает unicode своей основной последовательностью символов?

+0

Я сожалею, что ваш вопрос? Как получить не-юникодную версию строки, которую вы использовали для ее инициализации? – agf

+1

'unicode' называет свою« основную строку »' self'. Это похоже на попытку получить «3» из объекта «3». Если вам нужен экземпляр 'unicode', вы можете использовать' unicode (self) '. – user2357112

+0

@agf Я спрашиваю: если у вас есть 'myuni = unicode (" foo ")', то какой член 'unicode' использует, чтобы говорить о' u 'foo '' внутри экземпляра 'myuni'? Мне сложно сформулировать это, но я чувствую, что это довольно ясно, что я прошу иначе. – 2rs2ts

ответ

2

Поскольку вы подклассы unicode, экземпляры SufficComparingUnicodeString обычно можно использовать точно так же, как и любая другая строка Юникода. Таким образом, вы можете просто использовать other.endswith(self) в вашем __eq__() реализации:

class SuffixComparingUnicodeString(unicode): 
    def __eq__(self, other): 
     return isinstance(other, unicode) and other.endswith(self) 
+0

ohhhHHHHHHHhhh. – 2rs2ts

+0

+1 Хороший ответ! –

Смежные вопросы