如果Object不是None,则获取Python属性

时间:2017-09-06 23:42:54

标签: python python-3.x

如果对象存在于一行代码中,是否有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

1 个答案:

答案 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?