2011-09-05 17 views
7

私の過去の質問の1つは、作成者が作成したいクラスが他のクラスから継承する必要がない場合に、オブジェクトから継承するほうがよいことです。なぜオブジェクト型から継承するのですか

たとえば、私はいつも何をするかのように:

class suggested_class(object): 
    "a class inherits from object type" 
    def __init__(self): 
     pass 

私は両方のアプローチからの利益や不利益と混乱しています:彼または彼女が提案し何のため

class my_class: 
    "a class inherits from nothing" 
    def __init__(self): 
     pass 

質問1:

だからあなたの考えは何である、オブジェクト型または何も継承?

+2

http://docs.python.org/release/2.2.3/whatsnew/sect-rellinks.html#SECTION000310000000000000000 – wim

+0

を参照してください.2つの質問がある場合は、この投稿を1つの質問に限定してください。別の質問を投稿する](http://stackoverflow.com/questions/ask)。 – SingleNegationElimination

+0

'dir(my_class)'と 'dir(suggested_class)'を見ることができます。さらに、後述するように、Python3ではどちらも同じになります。 – steabert

答えて

5

新しいスタイルのクラスとは異なる動作をする古いスタイルのクラスを作成します。私はちょうど今の詳細を覚えていません(説明はhereを参照してください)。しかし、原則として、古いスタイルのクラスを好む理由はないので、オブジェクトから継承する必要があります。

+4

新しいスタイルクラスを持つ理由は1です:古いスタイルクラスのすべてのインスタンスの型は 'classobj'でした。興味深いものではありません.2:古いスタイルクラスのメソッド解決の順序が複数の継承のために壊れました。これらの問題の1つまたは両方を修正すると、既存のコードが大量に機能しなくなる可能性があるため、最も簡単なことは、異なる種類のクラスを作成することです。つまり、オブジェクトです。 – SingleNegationElimination

+1

@Tokenまた、Python 3では、すべてのクラスが 'object'を継承せずに新しいスタイルに戻っています。 – Keith

+0

さて、古いスタイルのクラスは壊れていて、py3は意図的に後方互換性を破るので、ジャンプするのに最適な時間です。 – SingleNegationElimination

関連する問題