Pythonを勉強しておりまして、現在は主にオブジェクト指向の考え方を学んでおります(オブジェクト指向はほとんど初学です)。これまでに書いたシンプルなプログラムをクラスとメソッドで書き換えているのですが、わからない点があるので教えてください。(関数を使ったほうが良いところもあるかもしれませんが、勉強のつもりで書き換えました)
##やってみたこと
名前が
Darth Luke Darth Lea Darth Lea Lea Luke Darth Lea ...
のように続いているファイルをnameslist.txtとして、この名前の数をカウントするプログラムを以下のように書いてみました。
手順は、「ファイルの読み込み」->「名前の重複がないリストを作成」-> 「そのリストをelementとして読み込んだファイルの名前をカウント」です。
ファイルの読み込みと、重複するリストの生成は別々の役割を担うので、クラスを分けました。
class Read_file: #ファイルの読み込み def __init__(self): self.file = [] def read_file(self): with open('nameslist.txt', 'r') as fi: name = fi.read() self.file = name.split("\n") return self.file class Undup_list: def __init__(self, list): self.list = list def undup_list(self): #名前の取り出し new_list = [] for x in self.list: # creating unduplicated name list if x not in new_list: new_list.append(x) return sorted(new_list) def count_element(self, element): #elementの数をカウント return self.list.count(element) if __name__=='__main__' name_in = [] name_list =[] name_count =[] file_in = Read_file() #インスタンス生成 name_in = file_in.read_file() name = Undup_list(name_in) #インスタンス生成 name_list = name.undup_list() for i in range(len(name_list)): #counting names name_count.append(name.count_element(name_list[i])) print(dict(zip(name_list, name_count))) #辞書に変換
質問内容
クラス Read_file で読み込んだリスト(self.file)を、クラス Undup_listで使うことは可能でしょうか? つまり、それぞれが関数として書かれているならば、関数の中で他の関数を呼び出すことは可能ですが、クラス間ではこれは可能なのでしょうか?
##その他
もしこのコードの中で、こういうふうに書き換えればもっと短くなるというところがあれば教えていただけるとうれしいです。
いずれの内容も、高度なオブジェクト指向の内容を含んでいても構いません。
以上よろしくお願い致します。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2017/04/16 12:55