クラスはtype
のサブクラスではなく、types.NotImplementedType
を含みます。 type
は、クラスのメタクラスです。例えば
、カスタムクラスとビルトインタイプはtype
いずれかのサブクラスではありません。
>>> class Foo: pass
...
>>> issubclass(Foo, type)
False
>>> issubclass(int, type)
False
だけ他のメタクラスはtype
のサブクラスです。 ABCMeta
メタクラスのように:
>>> from abc import ABCMeta
>>> issubclass(ABCMeta, type)
True
これはintancesとクラスに似ています。インスタンスはそのクラスのサブクラスではありません。あなたは*メタ型*を得る `(..)` `タイプにタイプ(..)`使用することにより
>>> issubclass(Foo(), Foo)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: issubclass() arg 1 must be a class
>>> isinstance(Foo(), Foo)
True
>>> import types
>>> isinstance(types.NotImplementedType, type)
True
を、そして 'のメタ型はNotImplementedType'は確か' type'がある:
isinstance()
使用(ほとんどの型はメタ型 'type'を持っています)。しかし、それはクラス自体が型のサブクラスであるという意味ではありません。 –この完全に正当な質問がなぜ下降しているのか分かりません – endolith