2

大規模なコードベースで Python 関数をリファクタリングしています。現在、次のようになっています。

def GetEvents(file_path):

    ...

    return events #a list of Event objects

一連のコードは、既にリスト オブジェクトを返すこの関数に依存しています。ただし、次のようにリファクタリングしたいと思います。

def GetEvents(file_path):

    ...

    return (events, event_header)

event_header は、このイベント グループの簡単な説明です。ただし、これにより、タプルではなくリストが返されることを現在期待しているすべてのコードがひどく壊れます。他の言語では、参照によって event_header を渡しますが、Python ではそれができないと思います。GetEventsAndHeader() という別の関数を宣言することもできますが、これは厄介なことに機能を重複させます。

提案?

4

3 に答える 3

6

タプルを返す必要がまったくない場合は、返されるリストに属性を追加するだけです。

class EventList(list):
    pass


def GetEvents(file_path):

    ...

    events = EventList(events)
    events.event_header = some_header
    return events
于 2013-08-01T17:49:03.650 に答える
0

前述のとおり、これが引数を取らない場合は、おそらく関数であってはなりません。それはおそらくオブジェクトの一部であり、そうでない場合はそうあるべきだと付け加えます。

そうすれば、次のことができます。

class EventGroup(object):

     def GetEvents(): # note camelcase is not pep8 compliant
         return dat_list


     def EventGroupInfo():
         return some_info

     def fact_about_events1():
         return fact1

     def fact_about_events2():
         return fact2

コードを並列化するために引数なしのメソッドを使用しましたが、必ずしもお勧めしません。

別の設計上の選択肢は、完全なリスト プロトコルを尊重し、イベントのグループに関するメタデータも保持するオブジェクトを返すことです。

于 2013-08-01T17:48:05.443 に答える