我想从 Python 对象中获取两个属性之一。如果这些属性都不存在,我想获得一个默认值。
例如,我想获取 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 类只能容纳一种水果。不存在同时存在苹果和橙子的风险。即使是这样,我仍然会将第一种水果(在本例中为苹果)存储在 n_fruits 中。
我想要一种优雅的 Pythonic 方式来解决这个任务:我想到了许多可能的解决方案,但它们都丑陋且令人费解!
顺便说一下,FruitBasket 只是一个例子。我实际上是在尝试从 scikit-learn 聚类器中获取质心。KMeans 和 MeanShift 算法将质心存储在“clusters_centers_”属性中,而 GaussianMixture 将其存储在“means_”属性中(出于我的目的,它们是相同的)。如果它们都不存在(在其他聚类算法的情况下),我想将质心设置为空列表。