如果对象存在于一行代码中,是否有Pythonic方法来获取属性?目前在下面的代码中,如果有人传入一个None类型的对象,代码就会中断,所以我需要一些干净的方法来检查它是不是None,而是在一行代码上。 C#的?.
语法非常有效,所以寻找类似的东西。
class MyClass:
def __init__():
self.my_property = "Hello, World!"
def print_class_property(myClassInstance):
print(myClassInstance???.my_property) # Here is where I need something inline
答案 0 :(得分:11)
您可以使用内置函数getattr
。它允许一个可选的第三个参数,如果传入的对象没有指定的属性,它将返回。来自文档:
getattr(对象,名称[,默认])
返回object的named属性的值。 name必须是一个字符串。如果字符串是对象属性之一的名称,则结果是该属性的值。例如,
getattr(x, 'foobar')
相当于x.foobar
。 如果指定的属性不存在,则返回 default (如果提供),否则会引发AttributeError。
大胆强调我的。
>>> getattr(None, 'attr', 'default')
'default'
以下是一个与您的问题有关的示例:
>>> class Class:
def __init__(self):
self.attr = 'attr'
>>> def func(obj):
return getattr(obj, 'attr', 'default')
>>> func(Class())
'attr'
>>> func(None)
'default'
正如@ juanpa.arrivillaga在评论中所说,处理此类案件时的另一个常用习惯是使用try/except
。请参阅What is the EAFP principle in Python?。