Изменение содержимого экземпляра строки - PullRequest
0 голосов
/ 02 мая 2018

Есть ли способ изменить содержимое из str экземпляра в python?

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

Я не могу просто создать новый метод класса, поэтому он переназначает строку, потому что это Widget класс модуля tkinter.

Мне нужно это, чтобы изменить цвет виджетов. Я знаю, что есть такие методы, как config метод, который сделает это для меня, но когда у меня есть около ста виджетов, а затем мне нужно изменить цвет всех их, и каждый цвет отличается, это очень не элегантно, неудобно писать строку конфигурации для каждого из этих виджетов, и это очень трудно поддерживать.

Я подумал, что в этом случае было бы здорово использовать указатель, но, к сожалению, в python нет указателей. Я даже думал о создании некоторого класса, который каким-то образом return будет содержать self.string контент вместо идентификатора экземпляра, такой как <__main__.Spam object at 0x02F20390>.

class String:
...     def __someprivatemethod__(self):
...             return "That returns string on call"
...
>>> spam = String()
>>> spam
<__main__.String object at 0x02F203F0>
>>> # now it should return the "That returns string on call

Я не хочу использовать метод __call__, хотя из-за скобок () в конце. В этом примере я просто хочу вернуть "That returns string on call" строку. Это вообще возможно?

1 Ответ

0 голосов
/ 02 мая 2018

Нет, вы не можете изменять строковые объекты после их создания. Строка неизменна

Однако, если я вас правильно понимаю, то, что вы хотите, можно сделать с помощью

class StringClass:
    def __someprivatemethod__(self):
        return "That returns string on call"
    def __repr__(self):
        return self.__someprivatemethod__()
    def __str__(self):
        return repr(self)
    def __add__(self, s):
        return '{}{}'.format(repr(self), s)

>>> a = StringClass()
>>> a
That returns string on call
>>> a + 'Strings'
>>>
That returns string on callStrings
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...