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

Cyb*_*rLX 3 python class python-3.x

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

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

Joe = Person('123')
Sarah = Person('321')
Run Code Online (Sandbox Code Playgroud)

我现在的问题是,如何在不事先知道名字的情况下使用其中一个实例,例如,我可能会有一些请求名称甚至ID的东西.我如何将其与适当的对象相关联?假设输入了一个id,'123',我如何知道它属于该Joe对象然后动态使用该对象?如果该信息很有用,我正在运行Python 3.6.

kin*_*all 5

当你学习计算机编程时,你可能会听到一个非常真实的笑话,即只有三个重要的数字:0,1和无穷大.换句话说,你不能拥有任何东西或某种东西,但如果你可以拥有多个东西,你就必须准备好处理它们中的任何一个.

当你只能有零或一个东西时,把它放在变量中就可以了.但是当你可以拥有任何数量的东西时,这个解决方案很快变得难以处理.程序员喜欢的解决方案是将对象放在容器中,如列表或字典.

例如,字典方法:

people = {"123": Person("123"), "321": Person("321")}
Run Code Online (Sandbox Code Playgroud)

然后乔是people["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")
Run Code Online (Sandbox Code Playgroud)

现在,当您实例化对象时,它们会people被ID自动添加到dict中,您可以这样访问它们.(您也可以按名称添加它们,假设名称是唯一的:如果ID和名称永远不会发生冲突,甚至可以添加到同一个字典中.)

NB"调用"在编程中有特定的含义:你调用一个函数.你这里没有打电话.