如果我有node.child1.child2,我可以asattr(node, 'child1.child2')有效地使用h 吗?如果没有child1或只是返回false,它会出错吗?
hasattr不会采用这样的虚线名称并向下导航属性链.但你可以写一个函数来做到这一点:
def get_deep_attr(obj, attrs):
for attr in attrs.split("."):
obj = getattr(obj, attr)
return obj
def has_deep_attr(obj, attrs):
try:
get_deep_attr(obj, attrs)
return True
except AttributeError:
return False
Run Code Online (Sandbox Code Playgroud)
这是一种方法:
def hasattrdeep(obj, *names):
for name in names:
if not hasattr(obj, name):
return False
obj = getattr(obj, name)
return True
Run Code Online (Sandbox Code Playgroud)
像这样称呼它:
hasattrdeep(node) is True # A side-effect. Could be made invalid if really desired by raising TypeError if len(names) == 0
hasattrdeep(node, 'foo') is False
hasattrdeep(node, 'child1') is True
hasattrdeep(node, 'child1', 'foo') is False
hasattrdeep(node, 'child1', 'child2') is True
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
772 次 |
| 最近记录: |