Python 如何通过类变量找到类的特定实例?
我想做的是检查类的每个实例的ID,如果它与某个ID匹配,那么它会告诉我类的名称,这可能吗?Python 如何通过类变量找到类的特定实例?,python,python-2.7,Python,Python 2.7,我想做的是检查类的每个实例的ID,如果它与某个ID匹配,那么它会告诉我类的名称,这可能吗? 例如:如果我正在查找“John”,我将查找ID号1如果我理解正确,您希望创建一个按ID搜索函数,以便ID链接到一个实例,您可以为此创建一个字典,键作为ID,值作为实例 class Class(): id_list = [] def __init__(self, name, id): self.name = name self.id = id
例如:如果我正在查找“John”,我将查找ID号1如果我理解正确,您希望创建一个按ID搜索函数,以便ID链接到一个实例,您可以为此创建一个字典,键作为ID,值作为实例
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)
如果只将每个实例的
id
值存储在id\u列表
类变量中,则无法轻松获取相应的名称。但是,如果您可以更改逻辑以在列表中存储对整个实例的引用,而不是id
,那么您就可以在列表中查找所需的任何属性。如果按id
进行查找很常见,您可能希望使用字典而不是列表来获得更快的查找(尽管如果id
值总是从0
开始,并且每次增加1
,您也可以在O(1)
时间中对列表进行索引)
试着这样做:
class Class():
id_list = {} # id_list will be a dict instead
def __init__(self, name, id):
self.name = name # no quotation marks...
self.id = id
Class.id_list[self.id] = self # save the id as key and self as he value
@classmethod
def search_by_id(cls, id):
try:
return cls.id_list[id] # return the instance with the id
except KeyError: # error check for if id does not exist
raise KeyError("No user with id %s" % str(id))
class1 = Class("Bob", 0)
class2 = Class("John", 1)
print(Class.search_by_id(0).name) # prints Bob
print(Class.search_by_id(1).name) # prints John
print(Class.search_by_id(2).name) # prints raised a KeyError since id 2 doesn't exist yet: KeyError: 'No user with id 2'
类:
实例=[]
def uu init(self,name):#不需要id参数
self.name=name#您的代码可能不应该在“name”周围加引号
self.id=len(self.instances)#自动使用下一个可用的id值
self.instances.append(self)#将对整个实例的引用附加到列表中
@类方法
按id(cls,id)查找def类别名称:
如果0如果您希望每次引用一个人时,他都有一个新id,您可以这样做:
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))
为什么不直接存储(id,class_name)
的元组呢?如果名称是键,你想引用它,那么你应该使用dict()我使用这个类不仅仅是为了这个,我想知道是否可以直接使用这个类。这是一个完美的答案!)这是一个完美答案的例子,很好
class MyClass():
ids = 0
id_list = {}
def __init__(self, name):
self.name = "name"
MyClass.ids += 1
self.myId = MyClass.ids
MyClass.id_list[self.myId] = self
def search_by_id(id):
return MyClass.id_list[id]
bob = MyClass("bob")
kyle = MyClass("kyle")
print(bob.myId)
print(kyle.myId)
print(MyClass.search_by_id(2).name)
>1
>2
>kyle