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