Python中的成员变量?

Python中的成员变量?,python,variables,concatenation,member,Python,Variables,Concatenation,Member,我正在尝试创建一个控制台输入程序,用户可以在其中向文件添加HTML 所以如果你按B(粗体) 然后你的输入是“测试” 它会将“测试”放入文件中 问题是,实际上只有一个函数“SaveToFile”应该将其保存到文件中,在调用该函数之前,我希望以某种方式保持输出排队,以便稍后写入文件,或者清除而不是放入文件中 我知道java和C#,所以我的想法是使用某种类型的成员变量 只需将这些行连接起来: mOutput += ("<B>"+userinput+"<B/>); mOu

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

所以如果你按B(粗体) 然后你的输入是“测试” 它会将“测试”放入文件中

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

我知道java和C#,所以我的想法是使用某种类型的成员变量 只需将这些行连接起来:

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

你知道我将如何在python中实现类似的功能吗?

与在其他语言中的实现方式基本相同。区别在于:

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

  • 要用于此操作的容器是
    列表
    。您可以调用列表的
    append
    方法向其中添加项。列表还支持
    +=
    ,但这需要一个序列,而不是单个项。更糟糕的是,字符串被视为字符序列,因此使用
    +=
    将字符串追加到列表中会将n字符串的单个字符作为单独的项!您可以通过编写例如
    container+=[item\u to\u add]
    来将第二个参数设置为一个序列,但这会迫使Python构建第二个列表,但没有充分的理由

  • 实例属性必须在实例化时显式初始化。如果在类上定义属性,例如在类定义中写入
    output=[]
    ,则该属性在类的所有实例之间共享(除非实例通过提供同名属性来覆盖该属性)。相反,在
    \uuuu init\uuuu
    方法中编写
    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))
类MyObject(对象):
定义初始化(自):
self.output=[]#空列表
def bold(自我、用户输入):
self.output.append(“+userinput+”)
def保存(自我,文件名):
打开(文件名为“w”)作为输出文件:
#写以换行符分隔的项目
outfile.write(“\n”.join(self.output))

或者类似的东西。

(讽刺提醒)您可以尝试搜索非常有用的内容。我知道您的保存功能正在输出到文件,并使用为列表中的每个元素创建新行的方式,但我想问一下“w”是什么意思?“w”表示“写入模式”。如果指定的文件不存在,则将创建该文件;如果确实存在,则将清空该文件。例如,请参阅或在Python中,
help(open)