古いPythonバージョンでは、Pythonでクラスを作成するときに、オブジェクトから継承することができます。これは、オブジェクトを新しいスタイルのオブジェクトにするための特別なビルトインPython要素です。Python 3.xでPythonのオブジェクトを継承することは必要なの?
新しいバージョン(> 3.0および2.6)はどうですか?私はクラスのオブジェクトについてのグーグルでは、私は非常に多くの結果を得る(明らかな理由のため)。何かヒント?
ありがとうございました!
古いPythonバージョンでは、Pythonでクラスを作成するときに、オブジェクトから継承することができます。これは、オブジェクトを新しいスタイルのオブジェクトにするための特別なビルトインPython要素です。Python 3.xでPythonのオブジェクトを継承することは必要なの?
新しいバージョン(> 3.0および2.6)はどうですか?私はクラスのオブジェクトについてのグーグルでは、私は非常に多くの結果を得る(明らかな理由のため)。何かヒント?
ありがとうございました!
object
から継承する必要はありません。すべてのクラスは新しいスタイルです。
ありがとうございました:)私はオンラインブック(Pythonのバイト)とPyhtonの文書をたくさん見ましたが、私の答えは決して見つけられませんでした... – thomas
Python 2.6についてはどうですか? – luc
Python 2.6はPython 2.xとして動作する – SilentGhost
これは古い質問であることを認識していますが、Python 3でもこの2つのことは全く同じではありません。
object
から明示的に継承した場合、実際に何をしているのかは、時刻が何であるかにかかわらず、builtins.object
から継承されます。
したがって、何らかの理由でオブジェクトをオーバーライドする(非常にばかげた)モジュールがある可能性があります。これは私たちが実際にすることができます(第3のファイルに続いて
class Greeter(object):
pass
class NonGreeter:
pass
:いくつかの他のファイル( "klasses.py")に続いて
import builtins
old_object = builtins.object # otherwise cyclic dependencies
class new_object(old_object):
def __init__(self, *args, **kwargs):
super(new_object, self).__init__(*args, **kwargs)
self.greeting = "Hello World!"
builtins.object = new_object #overrides the default object
:私たちは、この最初のモジュール "newobj.py" と呼ぶことにします)を実行します。
import newobj, klasses # This order matters!
greeter = klasses.Greeter()
print(greeter.greeting) # prints the greeting in the new __init__
non_greeter = klasses.NonGreeter()
print(non_greeter.greeting) # throws an attribute error
だから、あなたはそれが明示的にオブジェクトから継承している場合には、我々はあなたが暗黙の継承を許可する場所とは異なる動作を取得、ことがわかります。
狂気のためのUpvote!素晴らしい考え! –
コードが2.xでも使用されている場合は、明示的にするとよいでしょう。 – smci