11

例1:

class Person(object):
    pass

例2:

class Person:
    pass

オブジェクト宣言は何をしますか?あなたはそれを使うべきですか?私は両方のプログラムをたくさん持っていますが、それがどのような違いを生み出しているのかわかりません。誰かがこの概念を説明できるなら、お願いします。

4

2 に答える 2

15

Python2ではobject、基本クラスとして宣言すると、クラスは新しいスタイルのクラスになります。それ以外の場合は、「クラシック」クラスです。違いの中には

  • プロパティは、新しいスタイルのクラスでのみ機能します

  • 新しいスタイルのクラスにはmroメソッドがあります

  • 新しいスタイルのクラスには、従来のクラスにはない多くの属性があります

    In [288]: class Foo: pass
    In [289]: dir(Foo) 
    Out[289]: ['__doc__', '__module__']
    
    In [290]: class Bar(object): pass
    In [291]: dir(Bar) 
    Out[291]:  ['__class__',  '__delattr__',     '__dict__',  '__doc__',  '__format__',  '__getattribute__',     '__hash__',  '__init__',  '__module__',  '__new__',  '__reduce__',     '__reduce_ex__',  '__repr__',  '__setattr__',  '__sizeof__',     '__str__',  '__subclasshook__',  '__weakref__']
    

クラシッククラスは、下位互換性のためにのみPython2に保持されます。定義するすべてのカスタムクラスは、新しいスタイルにする必要があります。

Python3では、すべてのクラスが新しいスタイルであるため、そこで明示的に宣言する必要はありません。

于 2012-11-16T21:04:17.200 に答える
0

Python 2では、objectはそれを「新しいスタイルのクラス」にします。これが意味することの詳細はそれほど重要ではありませんが、肝心なのは、常にそれを使用する必要があるということです。そうしないと、正しく機能しない場合があります。

Python 3では、すべてが常に新しいスタイルのクラスであるため、そこで使用する必要はありませんobject

于 2012-11-16T21:04:23.497 に答える