Python 如何在事先不知道名称的情况下调用类的实例

Python 如何在事先不知道名称的情况下调用类的实例,python,python-3.x,class,Python,Python 3.x,Class,假设我有一个类的不同实例 class Person(object): def __init__(self, id): self.id = id Joe = Person('123') Sarah = Person('321') 我现在的问题是,我如何在不知道前面的名称的情况下使用其中一个实例,例如,我可以拥有请求名称甚至id的东西。我如何将其与适当的对象关联?假设输入了一个id“123”,我如何知道它属于Joe对象,然后动态地使用该对象?如果这些信息有用的话,我正在运

假设我有一个类的不同实例

class Person(object):
    def __init__(self, id):
        self.id = id

Joe = Person('123')
Sarah = Person('321')

我现在的问题是,我如何在不知道前面的名称的情况下使用其中一个实例,例如,我可以拥有请求名称甚至id的东西。我如何将其与适当的对象关联?假设输入了一个id“123”,我如何知道它属于
Joe
对象,然后动态地使用该对象?如果这些信息有用的话,我正在运行Python3.6。

当你学习计算机编程时,你可能会听到一个不太好笑的笑话,那就是只有三个重要的数字:0、1和无穷大。换句话说,你可以一个也不能有一个,但是如果你可以有多个,你必须准备好处理任意数量的问题

当您只能有零或某个值时,将其放入变量中就可以了。但是,当你可以拥有任意数量的东西时,这个解决方案很快就会变得笨拙。程序员喜欢的解决方案是将对象放入容器中,如列表或字典

例如,字典方法:

people = {"123": Person("123"), "321": Person("321")}
那么乔就是
人[“123”]

实际上,您还需要将人名存储在对象中,否则您无法判断它实际代表的是谁,因此您需要将其添加到
person
类中。您还可以在实例化对象时将其自身添加到主人员dict:

people = {}

class Person(object):
    def __init__(self, id, name):
        self.id = id
        self.name = name
        people[id] = self

joe = Person("123", "Joe")
sarah = Person("321", "Sarah")
现在,当您实例化对象时,它们会自动按ID添加到
人员
dict中,您可以这样访问它们。(您也可以按名称添加它们,假设名称是唯一的:如果ID和名称永远不会冲突,甚至可以添加到同一个词典中。)


注意,“调用”在编程中有一个特定的含义:调用函数。您没有在这里调用任何东西。

有很多方法,但这是一种严重的代码气味,从一开始就听起来像是糟糕的设计。但是最简单的方法是将对象保存在<代码> DICT<代码>中,将代码< > ID>代码>映射到所需的<代码>人>代码>对象……可以考虑制作<代码>人<代码>类变量。