基于python中的唯一属性识别实例

时间:2018-04-19 12:23:47

标签: python python-3.x class

我正在处理一个项目,如果我们可以根据其唯一实例识别类属性,它将使我更容易编码。 示例

class MyClass:
    def __init__(self, unique_id):
        self.unique_id = unique_id

以后

class1 = MyClass(1)
class2 = MyClass(2)

如果

,是否可以将对象class1作为输出
output = instance whose unique_id == 1

2 个答案:

答案 0 :(得分:1)

你可以保留一个实例的字典:

class MyClass:
    _instances = {}

    def __init__(self, unique_id):
        self.unique_id = unique_id
        self._instances[unique_id] = self

    @classmethod
    def instance_by_id(cls, id):
        return cls._instances[id]


a = MyClass(1)
b = MyClass(2)


c = MyClass.instance_by_id(1)

print(c)
print(a)
#<__main__.MyClass object at 0x7fa9dd0bfbe0> 
#<__main__.MyClass object at 0x7fa9dd0bfbe0>

答案 1 :(得分:1)

选项A:

如果您计划以连续方式添加ID,则可以将它们全部输入到列表中:

class_list = []
class_list.append(MyClass(1))
class_list.append(MyClass(2))

然后使用

获取它们
class_list[index]

选项B:

如果你不连续去找他们,你可以做以下事情

class_dict = {}
class_dict{"some_id"} = MyClass("some_id")
class_dict{"some_id2"} = MyClass("some_id2")

然后访问如下:

class_dict["some_id"]

选项C - 首选:

我个人会推荐以下内容:

class MyClass:
    static_dict = {}
    def __init__(self, unique_id):
        self.unique_id = unique_id
        MyClass.static_dict[unique_id] = self

    def get_class_by_id(unique_id):
        return static_dict[unique_id]

然后你可以访问如下:

MyClass.get_class_by_id("some_id")