Python 3.x 实例化后不可调用的类对象

Python 3.x 实例化后不可调用的类对象,python-3.x,class,Python 3.x,Class,我需要创建一个模块,该模块接受各种输入,并将每次迭代保存为类对象。函数raceDetails()只获取比赛类型和游泳人数,这一部分没有问题。函数getX()只是带有一些错误检查的输入函数。问题是,在输入所有内容后尝试调用对象或其任何变量只会让我: class Swimmers: """ Creates objects for each swimmer with unique details""" instances =

我需要创建一个模块,该模块接受各种输入,并将每次迭代保存为类对象。函数raceDetails()只获取比赛类型和游泳人数,这一部分没有问题。函数getX()只是带有一些错误检查的输入函数。问题是,在输入所有内容后尝试调用对象或其任何变量只会让我:

class Swimmers:
    """ Creates objects for each swimmer with unique details"""

    instances = []

    def __init__(self, fName = "None", lName = "None", house = "None", time = "None"):
        self.fName = getfName()
        self.lName = getlName()
        self.house = getHouse()
        self.time = getTime()
        self.__class__.instances.append(self)


    @classmethod
    def printInstances(cls):
        for instance in cls.instances:
            print(instance)


def test():

    style, swimmerNumber = raceDetails()

    for x in range(int(swimmerNumber)):
        y = re.sub(".0", "", str(x))
        string = "swimmer" + y
        print("\n" + string + "\n")
        string = Swimmers()
        x -= 1
>>0.fName
回溯(最近一次呼叫最后一次):
文件“”,第1行,在
游泳运动员0.fName
NameError:未定义名称“0”
我添加了由类(“实例”)创建的每个对象的列表,该类打印:

>>> swimmer0.fName
Traceback (most recent call last):
  File "<pyshell#0>", line 1, in <module>
    swimmer0.fName
NameError: name 'swimmer0' is not defined

以此类推,再加上正在工作的getX()函数,意味着对象的实例化非常好。我已经尝试了我能想到的一切,包括非局部变量、更改作用域、添加中介函数,但似乎都不起作用。我唯一能想到的是模块名称空间中的引用生成问题

我不必为此而使用课堂,我可以很容易地使用字典之类的工具,但我想尽可能地学习课堂


使用Windows 10、Python 3.9.2 32位

时,问题是您将
字符串
变量设置为所需的变量名('swimer0'、'swimer1'…),但随后将
字符串
设置为等于
游泳者
类。在python中可以动态设置变量名称,但通常需要使用字典(或其他集合对象)来存储对象

def test():
样式,游泳人数=比赛详情()
游泳运动员
对于范围内的x(整数(数字)):
y=re.sub(“.0”,“str(x))
string=“游泳者”+y
打印(“\n”+字符串+“\n”)
游泳运动员
x-=1
返回游泳运动员

这似乎无法解决问题。字典正在存储引用,我可以看到它们,但它给出了相同的回溯错误,即没有定义名称。是否有一种方法可以有效地手动将字典引用分配给对象名以允许调用,或者整个模块需要重写?您需要使用字典
swimmers\u dict['swimmer1']
字典中的赋值为0、1等。但是使用
swimmers\u dict调用这些对象['0']
只会引发一个“键错误”,具体来说:
回溯(最近一次调用):文件“”,在游泳者dict['0']KeyError:'0'
啊,我明白了,这是因为键不是字符串,所以像这样调用dict:
游泳者dict[0]
。或者修复我的示例,使用
游泳者dict[string]=…
因此您可以使用
0
等。您可以始终使用
dict.keys()检查字典的键
即使这样也不能解决问题。我在类中添加了一个
\uuuu call\uuuu
函数,创建了另一个函数来测试名称空间问题,甚至使
游泳者\u dict
全局化。手动实例化没有问题,由
test()
创建的所有对象都可以在
实例中查看[]
dictionary。这让我相信,随着函数
test()
的终止,对对象的引用正在被破坏,或者一些类似的行为导致了这个问题。时间限制意味着我现在必须放弃这个问题,但请随意添加任何见解。非常感谢您的帮助:)
<__main__.Swimmers object at 0x04182F88>
<__main__.Swimmers object at 0x04182E50>