【问题标题】:Member Variables in Python?Python中的成员变量?
【发布时间】:2015-02-27 19:48:03
【问题描述】:

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

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

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

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

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

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

【问题讨论】:

标签: python variables concatenation member


【解决方案1】:

与其他语言的方式几乎相同。区别在于:

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

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

  • 实例属性必须在实例化时显式初始化。如果您在类上定义属性,例如在类定义中写入output = [],则该属性在类的所有实例之间共享(除非实例通过提供具有相同名称的属性来覆盖它)。相反,请在您的 __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))

或者类似的东西。

【讨论】:

  • 非常有帮助。我知道您的保存功能正在输出到文件并使用为列表中的每个元素创建一个新行,但我可以问一下“w”是什么意思吗?
  • "w" 表示“写入模式”。如果指定的文件不存在,则创建该文件;如果确实存在,则将其清空。参见例如docs.python.org/2/library/functions.html#open 或 Python 中的 help(open)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-03-26
  • 1970-01-01
  • 2017-02-17
  • 1970-01-01
  • 1970-01-01
  • 2023-03-09
  • 2021-08-30
相关资源
最近更新 更多