Python列表中的一个函数

ZCJ*_*ZCJ 2 python class function list

我正在尝试打印这个类中的函数创建的列表 - 我需要修复什么?我从终端获得输出[<__main__.Person instance at 0x1004a0320>,.

class Person:
    def __init__(self,first,last,id,email):
        self.firstName=first
        self.lastName=last
        self.id=id
        self.email=email
        self.friends=[]
    def add_friend(self,friend):
        if len(self.friends)<5:
            self.friends.append(friend)
        if len(friend.friends)<5:
            friend.friends.append(self)

p1=Person("David","Waver","922-43-9873","dwaver@wsu.edu")
p2=Person("Bob","Jones","902-38-9973","bjones@odu.edu")
p3=Person("James","Smith","302-38-9103","jonsdfes@ou.edu")
p4=Person("Tim","Jack","902-38-0918","remmy@usc.edu")
p5=Person("Jim","Johnston","314-78-2343","jjohnston@fsu.edu")
p6=Person("Gina","Relent","102-38-1064","ginar@wvu.edu")
p7=Person("Greg","Morris","932-38-4473","jones@ttu.edu")

p1.add_friend(p2)
p1.add_friend(p3)
p1.add_friend(p4)
p1.add_friend(p5)
p1.add_friend(p6)
p1.add_friend(p7)

print p1.friends
Run Code Online (Sandbox Code Playgroud)

sen*_*rle 7

您需要定义__repr____str__在您的Person班级.

>>> class Person:
...     def __init__(self,first,last,id,email):
...         self.firstName=first
...         self.lastName=last
...         self.id=id
...         self.email=email
...         self.friends=[]
...     def add_friend(self,friend):
...         if len(self.friends)<5:
...             self.friends.append(friend)
...         if len(friend.friends)<5:
...             friend.friends.append(self)
...     def __repr__(self):
...         return self.firstName + ' ' + self.lastName
Run Code Online (Sandbox Code Playgroud)

然后如上所述初始化列表......

>>> print p1.friends
[Bob Jones, James Smith, Tim Jack, Jim Johnston, Gina Relent]
Run Code Online (Sandbox Code Playgroud)

这个答案很好地解释了这些功能.

鉴于上述情况后的点左右的功能__repr____str__,大概__repr__应该看起来更像是这样的:

def __repr__(self):
    template = "Person('{0}', '{1}', '{2}', '{3}')"
    return template.format(self.firstName, self.lastName, self.id, self.email)
Run Code Online (Sandbox Code Playgroud)

什么是很好对上述的是,它产生一个字符串,评价时,(除了创建具有相同的属性的对象friends)作为原始.例如:

>>> print p1
Person('David', 'Waver', '922-43-9873', 'dwaver@wsu.edu')
>>> Person('David', 'Waver', '922-43-9873', 'dwaver@wsu.edu')
Person('David', 'Waver', '922-43-9873', 'dwaver@wsu.edu')
Run Code Online (Sandbox Code Playgroud)

  • @ZCJ,不太好.它们在您提供的代码中被"打印".当你'打印'一个对象时,它的`__repr__`方法被调用,返回的字符串被用作对象的表示.`<main.Person实例位于0x1004a0320>`是默认的`__repr__`函数返回的内容.最后的十六进制id是对象的内存地址.(这是由`hex(id(p1))`返回的相同的东西.对于自定义类,Python希望您提供自己的`__repr__`,如果您希望它看起来正确; 如果你不这样做,它只使用默认值. (2认同)