我正在尝试创建一个控制台输入程序,用户可以在其中将HTML添加到文件中。
所以如果你按下B(粗体) 然后你的输入就是"测试" 它会把"测试"进入文件。
问题是,只有一个功能" SaveToFile"实际上应该将它保存到文件中,并且在调用该函数之前,我希望保持输出以某种方式排队等待以后写入文件,或者清除而不是放入文件。
我知道java和C#所以我的想法是拥有某种类型的成员变量 并且只是连接线:
mOutput += ("<B>"+userinput+"<B/>);
我知道如何在python中实现这样的目标吗?
答案 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))
或类似的东西。