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

Python Get Property if Object is not None

如果一个对象存在于一行代码中,是否有一种方法可以抓取属性?目前在下面的代码中,如果有人传入一个none类型的对象,代码将中断,因此我需要一些干净的方法来检查它不是none,而是在一行代码上。C的?.语法工作得很好,所以要寻找类似的语法。

1
2
3
4
5
6
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


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

getattr(object, name[, default])

Return the value of the named attribute of object. name must be a string. If the string is the name of one of the object’s attributes, the result is the value of that attribute. For example, getattr(x, 'foobar') is equivalent to x.foobar. If the named attribute does not exist, default is returned if provided, otherwise AttributeError is raised.

大胆强调我的。

1
2
>>> getattr(None, 'attr', 'default')
'default'

下面是一个与您的问题相关的更多示例:

1
2
3
4
5
6
7
8
9
10
11
12
>>> class Class:
    def __init__(self):
        self.attr = 'attr'


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

>>> func(Class())
'attr'
>>> func(None)
'default'

正如@juanpa.arrivilaga在评论中所说,处理此类案件时的另一个常见习惯用法是使用try/except。看看Python中的EAFP原理是什么?.