Python 中的成员变量?

Member Variables in Python?

我正在尝试创建一个控制台输入程序,用户可以在其中向文件添加 HTML。

所以如果你按 B(粗体) 然后你的输入是 "test" 它会将 "test" 放入文件中。

问题是,实际上只有一个函数 "SaveToFile" 应该将其保存到文件中,并且在调用该函数之前,我希望以某种方式将输出排队等待稍后写入到文件中,或清除而不是放入文件中。

我知道 java 和 C# 所以我的想法是拥有某种类型的成员变量 并连接这些行:

   mOutput += ("<B>"+userinput+"<B/>);

知道如何在 python 中实现这样的目标吗?

与其他语言的方式几乎相同。差异是:

  • 在Python方法中,您总是必须通过指定它附加到的对象来引用成员变量(通常称为实例属性),即使它是您自己的实例。这是通过 Python 自动将对您的实例的引用作为第一个参数传递给您的方法来实现的,按照惯例命名为 self。因此,您可能会写 self.output 而不是 mOutput (不需要匈牙利语,因为 self 很明显它是一个成员变量)。

  • 您要为此使用的容器是 list。您调用列表的 append 方法来向其中添加一个项目。列表也支持 += 但这需要一个序列,而不是单个项目。更糟糕的是,字符串被视为字符序列,因此使用 += 将字符串附加到列表会将字符串的各个字符附加为单独的项目!你可以使第二个参数成为一个序列,例如container += [item_to_add],但这迫使 Python 无缘无故地构建第二个列表。

  • 实例属性必须在实例化时显式初始化。如果您在 class 上定义属性,例如在 class 定义中写入 output = [],则该属性在 class 的所有实例之间共享(除非实例覆盖它通过提供具有相同名称的属性)。相反,在您的 __init__ 方法中写入 self.output = []

  • 您可以使用字符串的join方法将一个序列连接在一起。指定的字符串是连接元素之间的分隔符。 (这是大多数语言的倒退,但一段时间后就有意义了。)

综合起来:

class MyObject(object):

    def __init__(self):
        self.output = []   # empty list

    def bold(self, userinput):
        self.output.append("<B>" + userinput + "</B>")        

    def save(self, filename):
        with open(filename, "w") as outfile:
            # write items separated by line breaks
            outfile.write("\n".join(self.output))

或者类似的东西。