让我们定义几个Event
类:
class Event1:
def __init__(self, id, val1, val2):
self.id = id
self.val1 = val1
self.val2 = val2
class Event2:
def __init__(self, id):
self.id = id
class Event3:
def __init__(self, id, val1):
self.id = id
self.val1 = val1
我使用存储事件(heapq
)的队列。为了避免使用多个if / else语句,我使用or
压缩了我的语句。结果是:
event = heapq.heappop(heap)
if type(event) == Event1 or type(event) == Event2:
# Do stuff
else:
# Do stuff
我的问题是,在退出语句之前,我想重新计划与变量event
中的事件类型相同的新事件。
即在if语句中:
if type(event) == Event1 or type(event) == Event2:
new_event = # Same type as event, either Event1 or Event2
# Both take the same arguments,
# so I do not need to bother with *arg and **kwargs.
如何创建与变量相同类型的实例?谢谢!
答案 0 :(得分:2)
您可以获取对象的类型,然后初始化另一个对象
if type(event) == Event1 or type(event) == Event2:
new_event = type(event)(some_id)
作为旁注,我通常更喜欢isinstance
if isinstance(event, (Event1, Event2)):
new_event = type(event)(some_id)
答案 1 :(得分:2)
if isinstance(event, (Event1, Event2)):
new_event = type(event)()
使用type(event)
获取实例的类,并使用()
实例化该类的新实例。并且您应该使用isinstance
而不是比较类。 isinstance
不仅可以一次与多个类进行比较,而且还支持进一步的继承,即是否曾经class Event4(Event1): pass
。
答案 2 :(得分:1)
if type(event) in (Event1,Event2):
new_event = type(event)(something)
更容易检查天气type(event)
是Event1
还是Event2