我正在尝试查看我的对象是否已经存在属性的实例。正如您在下面看到的,如果我的Dog
对象有某个属性,我想通过do_something_if_has_aged
方法做一些事情。如何检查某个属性是否已声明?通常你会用这样的东西来检查是否存在,它返回False
:
obj = None
if obj:
print(True)
else:
print(False)
下面是我的最小可复制示例:
>>> class Dog:
def __init__(self, name, age):
self.name = name
self.age = age
def add_years(self, years):
self.age += years
self.has_aged = True
def do_something_if_has_aged(self):
if self.has_aged:
print("The dog has aged and is %d years closer to death" % self.years)
else:
print("The dog hasn't aged, apparently.")
>>> dog = Dog('Spot', 3)
>>> dog.age
3
>>> dog.do_something_if_has_aged()
Traceback (most recent call last):
File "<pyshell#193>", line 1, in <module>
dog.do_something_if_has_aged()
File "<pyshell#190>", line 9, in do_something_if_has_aged
if not self.has_aged:
AttributeError: 'Dog' object has no attribute 'has_aged'
>>> dog.add_years(1)
>>> dog.age
4
>>> dog.do_something_if_has_aged()
The dog hasn't aged, apparently.
很明显,这只狗已经老了。你知道吗
我很抱歉,如果标题没有反映我下面要表达的内容;我是OOP新手。你知道吗
我将重写
__init__
方法以包含self.has_aged = False
以避免进行检查:现在,你们班的其他同学应该按照书面形式来学习。但是,如果要查看对象上是否定义了属性,可以编写以下命令:
看起来您正在寻找^{} 内置函数:
在您的情况下,可以修改如下:
与其测试属性,不如在类上设置一个默认值;如果实例属性丢失,Python将改为查找class属性:
(注意,如果
self.has_aged
是真的您想进入第一个分支,而不是相反的分支,我必须反转您的测试)。你知道吗或者可以在
__init__
中为属性设置默认值:您还可以测试属性是否与^{} function 一起存在:
或者使用带有默认值的^{} function :
但是,动态测试属性不应该是您选择的第一个选项;拥有一个类默认值要干净得多。你知道吗
相关问题 更多 >
编程相关推荐