gpt4 book ai didi

python - 当对象在列表或字典中时,__str__ 方法不起作用

转载 作者:行者123 更新时间:2023-12-04 05:36:29 24 4
gpt4 key购买 nike

在这个例子中,第一个打印语句输出 ball.__str__() 返回的字符串。 ,而其他两个则没有:

class Ball:

def __init__(self, parent, xpos = 50, ypos = 50, radius = 100, vx = 0, vy = 0, mass = 1):
"""
x,y are positions
vx and vy are velocities in cells/second
"""
self.x = xpos
self.y = ypos
self.r = radius
self.vx = vx
self.vy = vy
self.mass = mass
self.board = parent

def __str__(self):
return "Ball: x={0}, y={1}, r={2}, vx={3}, vy={4}".format(self.x,self.y,self.r,self.vx,self.vy)

class Board:

def __init__(self, width = 100, height = 100, sps = 2):
pass

board = Board()

ball = Ball(board)
ball_list = [Ball(board), Ball(board)]
ball_dict = {'ball_1':Ball(board), 'ball_2':Ball(board)}

print(ball)
print(ball_list)
print(ball_dict)

输出:
Ball: x=50, y=50, r=100, vx=0, vy=0
[<__main__.Ball object at 0x106f79f98>, <__main__.Ball object at 0x106f79fd0>]
{'ball_1': <__main__.Ball object at 0x106f81048>, 'ball_2': <__main__.Ball object at 0x106f81080>}

问题:
  • 为什么python会这样?
  • 我该如何制作 str 字符串出现在列表和字典中?
  • 最佳答案

    print使用 __str__方法,但打印 dictlist调用 dict.__str__/list.__str__分别使用 __repr__序列化包含项目的方法。定义 __repr__在你的类里面模仿 __str__ .例如。这将:

    class Ball:
    ...

    def __str__(self):
    ...

    __repr__ = __str__

    请注意 __repr__应该返回一个最好是有效的 Python 代码的表示,比如 Ball(Board(100, 100, 2)) .

    关于python - 当对象在列表或字典中时,__str__ 方法不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46406165/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com