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))
或者类似的东西。
我正在尝试创建一个控制台输入程序,用户可以在其中向文件添加 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))
或者类似的东西。