Если вы делаете type(Child)
, вы спрашиваете, что такое type
вашего Child
класса . Помните, что классы также являются экземплярами в Python. Когда в вашем скрипте вы делаете class Child...
, в пространство имен скрипта добавляется новое имя (Child
) (в значительной степени переменная с именем Child
типа AMeta
, так как вы указываете, что AMeta
является метакласс Child
. В противном случае он будет иметь тип type
, что немного похоже на метакласс "по умолчанию")
См:
import six
class AMeta(type):
pass
class Parent(six.with_metaclass(AMeta, object)):
pass
class Child(Parent):
pass
print(type(Child))
c=Child()
print(type(c))
В первом отпечатке вы получите <class '__main__.AMeta'>
, потому что вы спрашиваете Каков тип моего Child instance ? . Во втором отпечатке вы получите <class '__main__.Child'>
, потому что вы спрашиваете Каков тип моего c
экземпляра ?
Вам не нужно делать type(Child)
, чтобы получить класс. Вы можете использовать его напрямую. Например:
obj = Child
dynamic_instance = obj()
print(type(dynamic_instance))
Распечатает <class '__main__.Child'>
Ближе к вам пример, который будет:
def create_obj(clzz):
return clzz()
a = create_obj(Child)
print("Just created: %s" % type(a))
Какие выходы Just created: <class '__main__.Child'>