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

时间:2017-12-15 23:32:58

标签: python

我正在尝试制作一个相扑选手。我已经描述了一个Rikishi类,它有一些属性(只有字符串和整数)

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只有几天。

提前感谢您的时间和精力

1 个答案:

答案 0 :(得分:1)

因为你的"属性"不是对象的实际属性(即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)