创建与变量相同类型的对象

时间:2018-08-09 10:55:29

标签: python class

让我们定义几个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.

如何创建与变量相同类型的实例?谢谢!

3 个答案:

答案 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