Как изменить функцию возврата / изменить переменную с помощью функции? - PullRequest
0 голосов
/ 02 января 2019

Мне было интересно, как можно получить переменную из функции.

Я попытался:

class Text():
  File=open("SomeFile.txt", "r")
  MyText=(File.read()+MoreText)
  def AddMoreText():
    MoreText=("This is some more text")

, прежде чем понял, что мне нужно снова запустить переменную MyText, которую яЯ не уверен, как это сделать.

Я намереваюсь вызвать этот текст, выполнив что-то вроде print(Text.MyText), которое не обновляется после выполнения Text.AddMoreText()

Затем я попытался:

class Text():
  global MoreText
  File=open("SomeFile.txt", "r")
  def ChangeTheText():
    return(File.read()+MoreText)
  MyText=ChangeTheText()
  def AddMoreText():
    MoreText=("This is some more text")

Чего я не знал, так это того, что функция возврата сохраняет свое значение, поэтому при запуске print(Text.MyText) Text.AddMoreText() print(Text.MyText) она отображала один и тот же текст дважды.

1 Ответ

0 голосов
/ 02 января 2019

Я думаю, вы хотите что-то вроде:

class Text:
    def __init__(self):
        self.parts = []
        with open('SomeFile.txt', 'r') as contents:
            self.parts.append(contents.read())
        self.parts.append('More text')

    def add_more_text(self, text):
        self.parts.append(text)

    @property
    def my_text(self):
        return ''.join(self.parts)

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

...