Python中的成员变量?

时间:2015-02-27 19:48:04

标签: python variables concatenation member

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

所以如果你按下B(粗体) 然后你的输入就是"测试" 它会把"测试"进入文件。

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

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

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

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

1 个答案:

答案 0 :(得分:1)

与其他语言几乎相同。不同之处是:

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

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

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

  • 您可以使用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))

或类似的东西。