为什么我的循环会重复生成/返回相同的值?

2024-06-28 20:18:08 发布

您现在位置:Python中文网/ 问答频道 /正文

我想做一个相扑发电机。我描述了一个类Rikishi,它有一些属性(只有string和int)

class Rikishi:

name = ''
weight = ''
skillRoll = ''
skill = ''
rank = ''

name = generateName()
*some loops to roll for numerical stats*

我也有一个清单,将保存所有的Rikishi对象

rikishiList = []

然后我有一个函数来生成类的一个实例

def generateRikishi():
    rikishi = Rikishi()
    return rikishi

显示对象中属性的函数:

def describeRikishi(rikishi):
    print(rikishi.name)
    print(rikishi.weight, 'kg')
    print(rikishi.rank)

然后我有一个函数用Rikishi对象填充数组

def fillBanzuke():
    for x in range (0, 2):
        r = generateRikishi()
        rikishiList.append(r)

最后是一个函数,它循环遍历rikishiList并打印一个数字(只是为了帮助测试中的视觉清晰度),然后打印列表中每个元素中Rikishi对象的统计信息

def describeBanzuke():
    for x in range (0, len(rikishiList)):
        print("#",x+1)
        describeRikishi(rikishiList[x])
        print()

然后我调用这两个函数

fillBanzuke()
describeBanzuke()

然后我打印列表的大小,以确保我指定的对象被附加到列表中

print('size of rikishi list:', len(rikishiList))

我得到的结果是

# 1
Udagaje
234 kg
Komusubi

# 2
Udagaje
234 kg
Komusubi

size of rikishi list: 2

有人能给我解释一下如何避免在列表的每个元素中出现相同的信息吗?我不确定我的问题是在生成rikishi对象时发生的,还是在打印列表内容时发生的。如有任何建议,将不胜感激。只花了几天时间自学python

提前感谢您的时间和精力


Tags: 对象函数name列表for属性defprint
1条回答
网友
1楼 · 发布于 2024-06-28 20:18:08

因为您的“属性”不是对象的实际属性(即self.name)。您可以在构造函数中设置对象的真实属性:

class A:
    a = 3
    def __init__(self):
        self.b = 5
    def __str__(self):
        return f"{self.a} {self.b}"

o1 = A()
o2 = A()
print(o1, o2)
o2.a = 7
o2.b = 7
print(o1, o2)

相关问题 更多 >