コンポジションエイリアスを実行する最もPython的で正しい方法は何ですか?
架空のシナリオを次に示します。
class House:
def cleanup(self, arg1, arg2, kwarg1=False):
# do something
class Person:
def __init__(self, house):
self.house = house
# aliases house.cleanup
# 1.
self.cleanup_house = self.house.cleanup
# 2.
def cleanup_house(self, arg1, arg2, kwarg1=False):
return self.house.cleanup(arg1=arg1, arg2=arg2, kwarg1=kwarg1)
私のテストしたエディターは#1のAFAIKでこれらを#2と同じように理解しています-自動補完、ドキュメント文字列など。
#1アプローチの欠点はありますか?Pythonの観点からどちらがより正しい方法ですか?
メソッド#1を拡張できず、型ヒントのバリアントを追加しても、コメントで指摘されているすべての問題の影響を受けません。
class House:
def cleanup(self, arg1, arg2, kwarg1=False):
"""clean house is nice to live in!"""
pass
class Person:
def __init__(self, house: House):
self._house = house
# aliases
self.cleanup_house = self.house.cleanup
@property
def house(self):
return self._house
Person.cleanup_houseすることと一致しています。その人に関連付けられている家を取得し、それを片付けます。#1はいくつかの家を掃除し、ある時点(初期化)で、その家が正しい家でした。それは人が家を変えるか、または人が家を持っていない場合にうまく対処しません