【问题标题】:How to print class variables in a list如何在列表中打印类变量
【发布时间】:2023-03-26 08:03:01
【问题描述】:

所以我对编码非常陌生,并从 python 开始,我试图在一个程序中构建一个类,通过随机化他们的属性来组合一个 DnD 派对。到目前为止,我可以让程序初始化派对成员的实例,并提示用户在他们的派对中选择多少英雄。我的问题是,在设置列表并准备好所有内容之后。我无法打印各个英雄的任何属性。无论我是从列表中调用它们还是直接尝试打印它们。我曾尝试使用__str__ 创建属性字符串,但我显然遗漏了一些东西。任何帮助将不胜感激。

import random


class Party:

    def __init__(self, name="", race="", alignment="", class_=""):

        self.name = name
        while name == "":
            name = random.choice(names)
            # print(name)
        self.race = race
        while race == "":
            race = random.choice(races)
            # print(race)
        self.alignment = alignment
        while alignment == "":
            alignment = random.choice(alignments)
            # print(alignment)
        self.class_ = class_
        while class_ == "":
            class_ = random.choice(classes)
            # print(class_)
    def character_stats(self):
        return "{} - {} - {} - {}".format(self.name, self.race, self.class_, self.alignment)

每个属性从列表中提取一个随机值。我的格式声明是获取要打印的属性值而不是对象/属性的最新尝试。 如果任何术语有误,我深表歉意,对此非常陌生

【问题讨论】:

  • 更多信息会有所帮助。当您尝试将它们打印出来时,发生了什么?我们可以看到你这样做的代码吗?

标签: python-3.x list class random


【解决方案1】:

除了输入之外,您没有分配任何其他内容,(在这种情况下是一个空字符串 "" 到属性。在您的最小示例中,您有这个构造函数:

class Party:
    def __init__(self, name=""):
         self.name = name
         while name == "":
             name = random.choice(names)

names 中随机分配一个新名称后,应将其分配给self,否则当__init__ 方法完成时,局部变量就会超出范围。这段代码 sn-p 应该可以工作:

class Party:
    def __init__(self, name=""):
        while name == "":
            name = random.choice(names)
        # Now we assign the local variable as 
        # an attribute
        self.name = name

【讨论】:

  • 非常感谢您的帮助,此修复有效。一切都完美打印
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-09-12
  • 2023-03-26
  • 1970-01-01
  • 1970-01-01
  • 2014-07-23
相关资源
最近更新 更多