Closed A03ki closed 4 years ago
テーブルのレコードを取得するとき、レコードが既に存在するかしないかで返ってくる値が異なる。 レコードがあればレコードのオブジェクトが返り、なければNoneが返る。
None
例えば、ホームタイムラインのsince_idを取得したいとする。apiw.home_timeline_idsを使ったときに、ホームタイムラインのレコードが存在する場合はsince_idを属性にもつオブジェクトが返る。存在しない場合はNoneが返る。Noneはsince_idという属性を持っていないので、レコードがある時とない時で分岐して処理を書く必要がある。
since_id
apiw.home_timeline_ids
from twissify.api_wrapper import APIWrapper ... apiw = APIWrapper(api, self.storage) home_timeline_indexes = apiw.home_timeline_ids if home_timeline_indexes is None: home_timeline_since_id = None else: home_timeline_since_id = home_timeline_indexes.since_id ...
このif文を全てのタイムラインごとに行うのは面倒。
if
該当するレコードがあるなし関係なく、apiw.home_timeline_idsから返ってくる値が全てsince_idという属性を持ったオブジェクトであればいい。これはnamedtupleを使えば簡単にできる。したがって、namedtupleを使ってsince_idとmax_idを持つオブジェクトに包んでから返すようにする。
namedtuple
max_id
home_timeline_since_id = apiw.home_timeline_ids.since_id
このように、必ず属性としてsince_idを持っているので使いやすくなる。
前提
テーブルのレコードを取得するとき、レコードが既に存在するかしないかで返ってくる値が異なる。 レコードがあればレコードのオブジェクトが返り、なければ
None
が返る。問題点
例えば、ホームタイムラインの
since_id
を取得したいとする。apiw.home_timeline_ids
を使ったときに、ホームタイムラインのレコードが存在する場合はsince_id
を属性にもつオブジェクトが返る。存在しない場合はNone
が返る。None
はsince_id
という属性を持っていないので、レコードがある時とない時で分岐して処理を書く必要がある。この
if
文を全てのタイムラインごとに行うのは面倒。解決策
該当するレコードがあるなし関係なく、
apiw.home_timeline_ids
から返ってくる値が全てsince_id
という属性を持ったオブジェクトであればいい。これはnamedtuple
を使えば簡単にできる。したがって、namedtuple
を使ってsince_id
とmax_id
を持つオブジェクトに包んでから返すようにする。このように、必ず属性として
since_id
を持っているので使いやすくなる。