给定一个对象很容易在python中获取对象类型:
obj = SomeClass()
t = type(obj)
如果没有先创建类的实例,我怎么能这样做?
背景:获得该类型后,您可以轻松创建该类型的实例。使用这种机制我想将一个类型传递给一个对象,该对象稍后将创建该类型的实例。不必首先创建一个会立即被丢弃的对象是非常合理的。
答案 0 :(得分:2)
请参阅此示例代码:
class MyClass(object):
pass
if __name__ == '__main__':
o1 = MyClass()
c = MyClass
o2 = c()
print(type(o1), type(o2), MyClass)
定义一个类将其绑定到它的名称(此处为:MyClass
),这只是对该定义的引用。在此示例中,发出c = MyClass
只是将类引用镜像到另一个变量,变量c
和MyClass
的内容现在完全相同。因此,您可以通过调用其中任何一个(即MyClass()
或c()
)来实例化该类的对象,从而产生相同的效果。
此外,测试实例化对象的类型会导致完全相同的类引用。你甚至可以更进一步做:
o3 = type(o1)()
这会创建一个类o1
的新实例。
答案 1 :(得分:1)
这个答案是为那些来到这个页面想知道的人准备的,“我怎样才能检查一个类的类型而不在 Python 中实例化它?”
如果您正在处理一个包含类而不是对象的变量,您可以使用 issubclass()
内置函数检查它是否是某个类。
建立在上一个答案的基础上:
>>> class MyClass(object):
>>> pass
>>> type(c)
<class 'type'>
>>> c = MyClass
>>> issubclass(c, MyClass)
True