python for循环不能正常工作

时间:2015-03-27 20:52:26

标签: python

class Note:

    note_number = 1

    def __init__(self, title="", memo="", id="", tag=""):

        self.memo = memo
        self.id = id
        self.number= Note.note_number
        Note.note_number += 1

    def __str__(self):

        return self.memo

class NoteBook:


    def __init__(self):
        self.note_book = []

    def add_note(self, *args):
            self.note_book.extend(args)

    def print(self):
        for note in self.note_book:
            print(note)

n1 = Note(memo = "I love chemistry")
n2 = Note("I hate chemistry")
n3 = Note("Inorganic")
notebook1 = NoteBook()
notebook1.add_note(n1, n2, n3)
notebook1.print()

我创建了3个音符对象并将它们添加到笔记本对象中,该对象是使用add_note()函数的列表。如果我用打印(notebook1)打印笔记本,它会在列表中正确显示3个项目。当我尝试使用print()函数时,假设要通过列表并打印每个音符的 str ,我只得到第一个音符"我喜欢化学"而不是其他2个注释为什么会这样呢?

I love chemistry

3 个答案:

答案 0 :(得分:6)

如果您想要打印备忘录 - 您应该使用备忘录创建备注:

变化:

n1 = Note(memo = "I love chemistry")
n2 = Note("I hate chemistry")
n3 = Note("Inorganic")

为:

n1 = Note(memo = "I love chemistry")
n2 = Note(memo = "I hate chemistry")
n3 = Note(memo = "Inorganic")

答案 1 :(得分:4)

您的__str__会返回memo。因此,您应该使用memo初始化所有笔记:

n1 = Note(memo="I love chemistry")
n2 = Note(memo="I hate chemistry")
n3 = Note(memo="Inorganic")

使用Note("I hate chemistry"),您只初始化了Note的构造函数的第一个参数,即title。说,你可以做的最小的改变是在构造函数中:

def __init__(self, memo="", title="", id="", tag=""):

答案 2 :(得分:2)

它会打印三个项目,但仅适用于您将memo设置为正确值的第一个项目。

构造函数定义为:

def __init__(self, title="", memo="", id="", tag="") :

所以第一个参数是title,你似乎没有对title做任何事情。

构建笔记时:

n1 = Note(memo = "I love chemistry")
n2 = Note("I hate chemistry")
n3 = Note("Inorganic")

仅针对第一个,您明确说明memo =

因此,如果您调用该程序,则会得到结果:

$ python3 notebook.py
I love chemistry


$

所以两个空白行来自打印笔记,.note等于空字符串。