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

Cam*_*n26 6 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
Run Code Online (Sandbox Code Playgroud)

Chr*_*ean 12

您可以使用内置功能getattr.它允许一个可选的第三个参数,如果传入的对象没有指定的属性,它将返回.来自文档:

getattr(object,name [,default])

返回object的named属性的值.name必须是一个字符串.如果字符串是对象属性之一的名称,则结果是该属性的值.例如,getattr(x, 'foobar')相当于x.foobar.如果named属性不存在,则返回default(如果提供),否则引发AttributeError.

大胆强调我的.

>>> getattr(None, 'attr', 'default')
'default'
Run Code Online (Sandbox Code Playgroud)

以下是一个与您的问题有关的示例:

>>> class Class:
    def __init__(self):
        self.attr = 'attr'


>>> def func(obj):
    return getattr(obj, 'attr', 'default')

>>> func(Class())
'attr'
>>> func(None)
'default'
Run Code Online (Sandbox Code Playgroud)

正如@ juanpa.arrivillaga在评论中所说,处理此类案件时的另一个常见习语是使用try/except.请参阅Python中的EAFP原理是什么?.

  • @ChristianDean:那些是方括号。尖括号是“<>”。 (2认同)