python - 如何通过类变量找到类的具体实例?

标签 python python-2.7

class Class():
    id_list = []

    def __init__(self, name, id):
        self.name = name
        self.id = id
        Class.id_list.append(self.id)

class1 = Class("Bob", 0)
class2 = Class("John", 1)

我想做的是遍历每个 Class 实例的 ID,如果它与某个 ID 匹配,它会告诉我类的名称,这可能吗? 例如:如果我要查找“John”,我会查找 ID 号 1

最佳答案

如果您只将每个实例的 id 值存储在 id_list 类变量中,则没有简单的方法来获取相应的名称。但是,如果您可以更改您的逻辑以在列表中存储对整个实例的引用而不是 id,那么您将能够在其上查找您想要的任何属性。如果通过 id 进行查找很常见,您可能希望使用字典而不是列表来获得更快的查找(尽管如果 id 值始终从 0 并每次增加 1,您也可以在 O(1) 时间内索引列表。

尝试这样的事情:

class Class:
    instances = []

    def __init__(self, name): # no id arg needed
        self.name = name  # your code probably shouldn't have quotation marks around "name"
        self.id = len(self.instances) # automatically use the next available id value
        self.instances.append(self) # append a reference to the whole instance to the list

    @classmethod
    def lookup_class_name_by_id(cls, id):
        if 0 <= id < len(cls.instances):
            return cls.instances[id].name
        raise ValueError("Invalid ID {}".format(id))

关于python - 如何通过类变量找到类的具体实例?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43969014/

相关文章:

python - 枚举在 Python 2.7 中不可迭代

xml - 解析 Rockwell L5X 文件

python - 如何从 EarthLocation 获取 AstroPy 数据只是数值(纬度、经度、纬度)

python - 在 Pandas 数据框中将某些行向左移动

python - 如何对方法对象中的方法进行单元测试?

python - 读取制表符分隔的 txt 文件并写入单独的 csv 列

python - 如何将数据框中的第二列除以第一列?

python - fasta 文件标题行插入列

python - 如何在 django 导航栏下拉列表中显示事件链接?

python - 是否可以使用 argparse 将正则表达式字符串作为参数传递给 Python CLI 工具?