【发布时间】:2011-04-14 02:46:14
【问题描述】:
拥有一个对象x,它是一些类的实例,如何创建与x对象相同的类的新实例,而所有可能 em> 类在同一命名空间中,我们要在其中创建相同类型的新对象,并使用isinstance 找出正确的类型。
例如,如果x 是十进制数:
>>> from decimal import Decimal
>>> x = Decimal('3')
>>> x
Decimal('3')
如何创建Decimal 的新实例。我认为显而易见的做法是:
>>> type(x)('22')
Decimal('22')
>>> x.__class__('22')
Decimal('22')
因为__class__ 不能在int 上工作,例如:
>>> 1.__class__
File "<stdin>", line 1
1.__class__
使用type 来实现这一点是一种好习惯,还是在使用这种方法创建新对象时有其他一些方法或更多注意事项?
注意:
有一个答案现在已被删除,它提供了获取__class__ of int 的正确方法。
>>> (1).__class__
<type 'int'>
用例
这个问题主要是理论上的,但我现在正在使用这种方法和 Qt 来创建 QEvent 的新实例。例如,由于QEvent 对象被应用程序事件处理程序使用,以便将事件发布到QStateMachine,因此您需要创建事件的新实例,否则您会收到运行时错误,因为底层 C++ 对象被删除。
由于我使用自定义的QEvent 子类,它们都共享相同的基类,因此对象接受相同的预定义参数集。
【问题讨论】:
标签: python class types instantiation