私は次の両方の仕事を見つけました:
class Foo():
def a(self):
print "hello"
class Foo(object):
def a(self):
print "hello"
すべてのPythonクラスはオブジェクトを拡張する必要がありますか?オブジェクトを拡張しないことで潜在的な問題はありますか?
Python 2では、object
を継承しないと、古いスタイルのクラスが作成されます。これにより、さまざまな効果の中で、type
が異なる結果をもたらします。
>>> class Foo: pass
...
>>> type(Foo())
<type 'instance'>
vs.
>>> class Bar(object): pass
...
>>> type(Bar())
<class '__main__.Bar'>
また、多重継承のルールは different であり、ここでは要約しません。 MIについて私が見たすべての優れたドキュメントは、新しいスタイルのクラスについて説明しています。
最後に、古いスタイルのクラスはPython 3で消滅し、object
からの継承は暗黙的になりました。したがって、古いソフトウェアとの下位互換性が必要でない限り、常に新しいスタイルのクラスを好みます。
Python 3では、自分で言うかどうかにかかわらず、クラスはobject
を暗黙的に拡張します。
Python 2には、 古いスタイルと新しいスタイル クラスがあります。クラスが新しいスタイルであることを通知するには、object
から明示的に継承する必要があります。そうでない場合は、古いスタイルの実装が使用されます。
通常、新しいスタイルのクラスが必要です。 object
から明示的に継承します。これは、Python 2との互換性を目指すPython 3コードにも適用されることに注意してください。
python 3では、3つの異なる方法でクラスを作成でき、内部的にはすべて同じです(例を参照)。クラスの作成方法は関係ありません。python 3のすべてのクラスはobjectと呼ばれる特別なクラスを継承します。クラスobjectはpythonの基本クラスであり、二重アンダースコアメソッド、記述子、super()メソッド、property()メソッドなどの多くの機能を提供します。
例1.
class MyClass:
pass
例2。
class MyClass():
pass
例3.
class MyClass(object):
pass
はい、すべてのPythonクラスは(またはサブクラス、これはPythonここに)オブジェクトを拡張する必要があります。通常、深刻な問題は発生しませんが、場合によっては(複数の継承ツリーの場合のように)これは重要です。これにより、Python 3との互換性も向上します。
python3では違いはありませんが、python2ではobject
を拡張しないため、古いスタイルのクラスが得られます。古いスタイルのクラスよりも新しいスタイルのクラスを使用したい場合。