1

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_」属性に格納します (私の目的では、それらは同じです)。どちらも存在しない場合 (他のクラスタリング アルゴリズムの場合)、セントロイドを空のリストに設定します。

4

2 に答える 2