Расположение класса строки Python в исходном коде - PullRequest
16 голосов
/ 29 сентября 2010

Я пытаюсь перегрузить оператор + для определенной строки, поэтому я подумывал о создании подкласса класса строки, а затем о добавлении кода в новый класс.Тем не менее, я хотел сначала взглянуть на стандартный класс строк, но я не могу найти его ... глупо, а?

Кто-нибудь может указать путь?Даже онлайн документация с исходным кодом.

Ответы [ 3 ]

9 голосов
/ 29 сентября 2010

Это задокументировано здесь . Основная реализация в Objects/stringobject.c. Подклассы str, вероятно, не то, что вы хотите, хотя. Я бы предпочел композицию здесь; есть объект со строковым полем и специальным поведением.

1 голос
/ 29 сентября 2010

Вы могли бы иметь в виду это.

class MyCharacter( object ):
    def __init__( self, aString ):
        self.value= ord(aString[0])
    def __add__( self, other ):
        return MyCharacter( chr(self.value + other) )
    def __str__( self ):
        return chr( self.value )

Это работает так.

>>> c= MyCharacter( "ABC" )
>>> str(c+2)
'C'
>>> str(c+3)
'D'
>>> c= c+1
>>> str(c)
'B'
0 голосов
/ 30 сентября 2010

моя реализация похожа, но не так аккуратна:

class MyClass:
    def __init__(self, name):
        self.name = name
    def __add__(self, other):
        for x in range(1, len(self.name)):
            a = list(self.name)[-1 * x]
            return self.name[:len(self.name)-x] + chr(ord(a) + other)


>>> CAA = MyClass('CAA')
>>> CAA + 1
'CAB'
>>> CAA + 2
'CAC'
>>> CAA + 15
'CAP'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...