python - 检查对象的属性是否已定义
问题描述
在此代码示例中,我怎么说:“如果未定义颜色”?
class A:
def __init__(self, name):
self.name = name
def atribute(self, color):
self.color = color
object1 = A('car')
object2 = A('ship')
object1.atribute('blue')
if not object2.color:
object2.atribute('red')
print(object2.color)
运行此代码时出现的输出错误:“'A' 对象没有属性 'color'”
解决方案
您可以使用if hasattr(object1, 'color')
,但这从一开始就看起来像是一个糟糕的设计(一方面,在外部定义属性__init__
既令人困惑又违反 PEP8)。
我建议使用默认值为 的属性None
,然后您可以使用简单的检查(通过查看实例具有的属性if
很清楚):__init__
A
class A:
def __init__(self, name, color=None):
self.name = name
self._color = color
@property
def color(self):
return self._color
@color.setter
def color(self, value):
# some logic you may need before setting color to value
self._color = value
object1 = A('car')
if not object1.color: # or if object1.color is None:
object1.color = 'blue'
推荐阅读
- python - 如何修复我的 CNN?我陷入了一个错误的循环,我知道我错误地实施了 CNN?
- python - Pandas - 将函数应用于一列以扩展到新列
- r - 如何根据应用于不同列的条件语句应用引用特定列和前导值的函数
- r - 贝叶斯网络 'catnet' 包 cnPlot 返回 null
- sql - 将星期日作为一周的第一天返回
- asp.net - OAuth2 的哑登录
- javascript - Electron js 桌面应用程序不再运行,运行某种 Electron js 默认应用程序
- kotlin - Kotlin 扩展功能 - 完成?
- python - 将患者坐标转换为 DICOM 图像的体素坐标
- python - Selecting the last element of a list inside a pandas dataframe