繁体   English   中英

如何遍历对象列表

[英]How do I iterate through a list of objects

我正在尝试打印对象(记录)的列表(电话簿),但我是 python 的新手,它无法识别记录是列表中的对象。 在这种情况下我将如何调用对象?

我试过查看 python for 循环的教程,但没有参考如何调用列表中的对象。

class record:
    def __init__(self,telephone,lastname,firstname):
        self.telephone = telephone
        self.lastname = lastname
        self.firstname = firstname

class PhoneBook:
    def __init__(self):
        self.phonebook = []

    def printphonebook(self):
        for record in self.phonebook:
            x = 0
            print(self.phonebook[x])
            x = x + 1

预期输出将是对象列表,包括电话号码、姓氏和名字。

你想打印一个类的实例。 所以你应该提供特殊的__str__方法来告诉 python 对象应该如何打印。 __str__()必须返回一个字符串: 这里是文档。

class record:
    def __init__(self,telephone,lastname,firstname):
        self.telephone = telephone
        self.lastname = lastname
        self.firstname = firstname

    def __str__(self):
        #returning a string with the content, you can edit the string to fit your needs.
        #here I am using formatted string literals, works with python >= 3.6
        return f"Last name: {self.lastname}, First Name: {self.firstname}, Telephone: {self.telephone}"

class PhoneBook:
    def __init__(self):
        self.phonebook = []

    def printphonebook(self):
        for entry in self.phonebook:
            print(entry)

这里发生的事情是,当您调用print(record)__str__() str __str__()方法用于提供表示实例内容的字符串。

所以如果你这样做:

book = PhoneBook()
book.phonebook.append(record(800, "Wayne", "Bruce"))
book.phonebook.append(record(1234,  "Kent", "Clark"))
book.phonebook.append(record(499, "Prince", "Diana"))

book.printphonebook()

这将打印:

姓:Wayne,名字:Bruce,电话:800
姓:肯特,名字:克拉克,电话:1234
姓:Prince,名字:Diana,电话:499

  1. 您的self.phonebook没有任何元素。 当然,它什么也不打印。
  2. 您创建的每次迭代x=0所以您总是会打印第一项:
class record:
    def __init__(self,telephone,lastname,firstname):
        self.telephone = telephone
        self.lastname = lastname
        self.firstname = firstname

class PhoneBook:
    def __init__(self):
        self.phonebook = [1,2,3,4,5]

    def printphonebook(self):
        for record in self.phonebook:
            x = 0
            print(self.phonebook[x])
            x = x + 1

a = PhoneBook()
a.printphonebook()
1
1
1
1
1
  1. 你的x索引真的毫无意义,你可以只打印record
class record:
    def __init__(self,telephone,lastname,firstname):
        self.telephone = telephone
        self.lastname = lastname
        self.firstname = firstname

class PhoneBook:
    def __init__(self):
        self.phonebook = [1,2,3,4,5]

    def printphonebook(self):
        for record in self.phonebook:
            print(record)

a = PhoneBook()
a.printphonebook()
1
2
3
4
5

所以: 1. 用任何元素填充你的self.phonebook 2. 打印record ,没有索引。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM