首页 > 解决方案 > 检查对象的属性是否已定义

问题描述

在此代码示例中,我怎么说:“如果未定义颜色”?

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'”

标签: pythonpython-3.xclass

解决方案


可以使用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'

推荐阅读