Как получить доступ к строковому значению из нового класса, который наследует строковый тип - PullRequest
1 голос
/ 16 февраля 2010

Я хочу определить новый класс, который наследует сборку в типе str, и создать метод, который дублирует содержимое строки.

Как мне получить доступ к строковому значению, присвоенному объекту моего нового класса?

    class str_usr(str):
        def __new__(cls, arg):
            return str.__new__(cls, arg)
        def dub(self):
            # How to modify the string value in self ?
            self.<attr> = self.<attr> + self.<attr>

Спасибо за любую помощь: -)

Ответы [ 3 ]

3 голосов
/ 16 февраля 2010

Строки в Python являются неизменяемыми, поэтому, если у вас есть одна строка, вы не можете изменить ее значение. Это почти так же, как если бы у вас был класс, производный от int, а затем вы добавили метод для изменения значения int.

Конечно, вы можете вернуть новое значение:

class str_usr(str):
    def dup(self):
        return self + self # or 2 * self

s = str_usr("hi")
print s # prints hi
print s.dup() # print hihi
2 голосов
/ 16 февраля 2010

Не похоже, что вы вообще хотите наследовать от str (что в любом случае очень полезно) Создайте новый класс, и один из его атрибутов будет строкой, к которой вы обращаетесь, то есть

class MyString(object):
    def __init__(self, string):
        self.string = string

    def dup(self):
        self.string *= 2

Также обратите внимание на это:

  • Назовите ваши классы с CamelCaseCapitalization, чтобы люди могли узнать, что они классы. str и некоторые другие встроенные функции не следуют этому, но все пользовательские классы делают это.
  • Обычно вам не нужно определять __new__. Определение __init__, вероятно, будет работать. То, как вы определили __new__, не особенно полезно.
  • Чтобы добавить новую функциональность в строки, вам, вероятно, не нужен класс; вы, вероятно, просто хотите определить функции, которые принимают строки.
0 голосов
/ 16 февраля 2010

Обратите внимание, что в Python вы можете просто использовать оператор умножения для строки:

>>> s = "foo"
>>> s*2
'foofoo'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...