Python オブジェクトから 2 つの属性のいずれかを取得したいと考えています。これらの属性がどちらも存在しない場合は、デフォルト値を取得したいと考えています。
たとえば、FruitBasket 内のリンゴまたはオレンジの数を取得したいのですが、どちらも存在しない場合は、n_fruits を 0 に設定します (他の果物には興味がないため)。
fruit_basket = FruitBasket(bananas=5)
try:
n_fruits = getattr(fruit_basket, "apples")
except AttributeError as err:
n_fruits = getattr(fruit_basket, "oranges")
except AttributeError as err:
n_fruits = 0
リンゴもオレンジもない場合、このコードは壊れます。
AttributeError("'FruitBasket' object has no attribute 'oranges'")
クラス FruitBasket は、1 種類の果物のみを保持できます。リンゴとオレンジの両方が存在するリスクはありません。その場合でも、最初の種類の果物 (この場合はリンゴ) を n_fruits に格納します。
このタスクを解決するためのエレガントな Pythonic の方法が必要です。多くの可能な解決策を念頭に置いていますが、それらはすべて醜くて複雑です!
ちなみにフルーツバスケットは一例です。私は実際に scikit-learn クラスタラーから重心を取得しようとしています。KMeans および MeanShift アルゴリズムは重心を「clusters_centers_」属性に格納し、GaussianMixture はそれを「means_」属性に格納します (私の目的では、それらは同じです)。どちらも存在しない場合 (他のクラスタリング アルゴリズムの場合)、セントロイドを空のリストに設定します。