2017-04-16 10 views
0

私はオブジェクト指向のPythonを学んでいます。この問題はpythonがappendメソッドを使う組み込みの 'list'クラスを継承するようになっています。Python、なぜ私たちは 'list'クラスを継承しなければならないのですか?

class ContactSearch(list):     #Why inherit from 'list'? 
    def search(self, name): 
     matching_contact = [] 
     for contact in self: 
      if name in contact.name: 
       matching_contact.append(contact) 
     return matching_contact 

なぜ空リストを宣言して追加できないのですか?例えばそれは、リストクラスの継承せずに、次のコードで見つけ作品:ContactSearchで

class Contact: 
    all_contacts = [] 

    def __init__(self, name, email): 
     self.name = name 
     self.email = email 
     Contact.all_contacts.append(self) 
+0

「自己」とは何を期待していますか?あなたのクラスはデータを格納していますか?もしそうなら、どうですか? –

+0

申し訳ありませんが、私はあなたを取得していません。私が理解しようとしているのは、これらの2つのクラスで、これらの2つのクラスの違いは何ですか: matching_contact = []と all_contacts = [] どちらも空リストを宣言していませんか? – Hannan

+1

問題は、 'for contact in self:'行です。これは、反復をサポートするように書くクラスを必要とします。 'list'から継承するとき、あなたは' list'に組み込まれた反復を継承します –

答えて

0

matching_contactは、検索結果のための一時的な変数です。 ContactSearchのインスタンスはリストです。したがって、検索メソッドはイテレータでselfを使用できます。検索方法が完了するとmatching_contactは終了しました。

連絡先では、all_contactsがクラス変数であり、連絡先のすべてのインスタンスがこれを共有します。連絡先のインスタンスはリストではありません。しかし、Contact.all_contactsのようにすべての連絡先にアクセスすることができます。はい、それはリストです。

違いは、データが保存されている場所のみです。 1つはデータそのものを格納し、もう1つはその変数にデータを格納します。

関連する問題