古いバージョンのpythonでは、pythonでクラスを作成すると、オブジェクトから継承できます。これは、オブジェクトを新しいスタイルのオブジェクトにできるようにする特別な組み込みpython要素を理解している限りです。
新しいバージョン(> 3.0および2.6)についてはどうですか?私はクラスオブジェクトについてグーグルで検索しましたが、(明らかな理由により)多くの結果が得られました。ヒントはありますか?
感謝!
古いバージョンのpythonでは、pythonでクラスを作成すると、オブジェクトから継承できます。これは、オブジェクトを新しいスタイルのオブジェクトにできるようにする特別な組み込みpython要素を理解している限りです。
新しいバージョン(> 3.0および2.6)についてはどうですか?私はクラスオブジェクトについてグーグルで検索しましたが、(明らかな理由により)多くの結果が得られました。ヒントはありますか?
感謝!
回答:
objectPython 3で新しいスタイルを使用するために、から継承する必要はありません。すべてのクラスは新しいスタイルです。
object明示的に入力した場合にかかわらず、(object)ではないのPython 3.1でまたは
これは古い質問だと思いますが、python 3でもこれら2つはまったく同じではないことに注意してください。
から明示的に継承する場合object、実際に実行しているのは、その時点で何を指しているかに関係なく、から継承builtins.object することです。
したがって、何らかの理由でオブジェクトをオーバーライドする(非常に奇抜な)モジュールを使用できます。この最初のモジュールを「newobj.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
次に、他のファイル( "klasses.py")で:
class Greeter(object):
pass
class NonGreeter:
pass
次に、3番目のファイル(実際に実行できます):
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
つまり、オブジェクトから明示的に継承している場合、暗黙的な継承を許可している場合とは異なる動作をすることがわかります。