2016-04-05 7 views

答えて

3

はい、Python2とのpython3の両方インチしかし、このようなクラスのインスタンスは、まだobjectのインスタンスである:

>>> class Foo: 
...  pass 
... 
>>> foo = Foo() 
>>> foo 
<__main__.Foo instance at 0x7f2a33474bd8> 
>>> type(foo) 
<type 'instance'> 
>>> foo.__class__ 
<class __main__.Foo at 0x7f2a33468668> 
>>> Foo.mro() 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
AttributeError: class Foo has no attribute 'mro' 
>>> issubclass(Foo, object) 
False 
>>> isinstance(foo, object) 
True 
>>> type(foo).mro() 
[<type 'instance'>, <type 'object'>] 
>>> issubclass(type(foo), object) 
True 

は編集:私はできますが、私は、はいいくつかのものは、Python < 2.6のために異なることと、おそらくC.

1

はい。

isinstance機能でこれを知ることができます。 Python2で、objectのサブクラスではありませんだけクラスは、古いスタイルのクラスであることを

​​

注:

>>> isinstance(None, object) 
True 
+2

技術的には、インスタンスチェックは、サブクラスチェックと同じではありません。これは、mroチェックと同じではありません。 – o11c

+0

@ o11c 'str .__ bases__'は' object'を与えます。しかし 'NoneType .__ bases__'は' object'を与えません。 '__bases__'プロパティはサブクラスをチェックするのに適していますか? – overexchange

+1

@overexchange 'type(None).__ bases__ ==(object、)'私のためにpython2.7とpython3.5で – o11c

1

で実装タイプのためかもしれない疑いがありますバージョン3.4のテスト

Python 3.4.3 (default, May 5 2015, 17:58:45) 
[GCC 4.9.2] on cygwin 
Type "help", "copyright", "credits" or "license" for more information. 
>>> None.__class__ 
<class 'NoneType'> 
>>> issubclass(None.__class__, object) 
True 
関連する問題