我正在尝试制作一个相扑选手。我已经描述了一个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只有几天。
提前感谢您的时间和精力
答案 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)