嵌套self.\uuuu parent.\uuuu parent的Pythonic快捷方式(语法sugar)__
我在Python中有这个例子(使用金字塔框架),我试图检查条件。 代码如下:嵌套self.\uuuu parent.\uuuu parent的Pythonic快捷方式(语法sugar)__,python,pyramid,Python,Pyramid,我在Python中有这个例子(使用金字塔框架),我试图检查条件。 代码如下: if some_condition: value = self.__parent__.__parent__.__parent__.method() else: value = self.__parent__.__parent__.method() 问题是,是否有更多的python方式(语法糖快捷方式)用于动态表示\uuuuuu parent\uuuuu.\uuuuuu parent\uuuu… 我知道
if some_condition:
value = self.__parent__.__parent__.__parent__.method()
else:
value = self.__parent__.__parent__.method()
问题是,是否有更多的python方式(语法糖快捷方式)用于动态表示\uuuuuu parent\uuuuu.\uuuuuu parent\uuuu…
我知道有这样的Python语法:
value1, value2, value3 = (None,) * 3
我的案例是否也有类似的动态变化?
我在谷歌、Python文档、Reddit源代码和开放堆栈源代码中搜索,我花了2天时间搜索,所以决定在这里提问。据我所知,Python中没有这种语法 但是,您确实可以实现用于获取父资源列表的自定义方法:
def find_ancestors(resource):
ancestors = [resource]
while hasattr(ancestors[-1], '__parent__'):
ancestors.append(ancestors[-1].__parent__)
return ancestors
或一种迭代它们的方法:
def iter_ancestors(resource):
yield resource
while hasattr(resource, '__parent__'):
resource = resource.__parent__
yield resource
而且,我不确定这样的方式是否合适。我认为您应该看看这个方法,并设法为您的资源定义适当的接口来定位它们。这样做,您的代码将如下所示:
value = find_interface(self, ResourceA if some_condition else ResourceB).method()
更新:由@Dunes在其答案中提供的代码是另一种通过索引获取祖先的好方法。据我所知,python中没有这种语法 但是,您确实可以实现用于获取父资源列表的自定义方法:
def find_ancestors(resource):
ancestors = [resource]
while hasattr(ancestors[-1], '__parent__'):
ancestors.append(ancestors[-1].__parent__)
return ancestors
或一种迭代它们的方法:
def iter_ancestors(resource):
yield resource
while hasattr(resource, '__parent__'):
resource = resource.__parent__
yield resource
而且,我不确定这样的方式是否合适。我认为您应该看看这个方法,并设法为您的资源定义适当的接口来定位它们。这样做,您的代码将如下所示:
value = find_interface(self, ResourceA if some_condition else ResourceB).method()
更新:由@Dunes在其答案中提供的代码是另一种通过索引获取祖先的好方法。如果您不喜欢父链,您可以编写一个助手方法来获取给定深度的节点。虽然这可能不太清晰 例如 用法:
get_parent(self, 3).method()
如果您不喜欢父链,您可以编写一个helper方法来获取给定深度的节点。虽然这可能不太清晰 例如 用法:
get_parent(self, 3).method()
我知道find_接口,但需要知道是否有一些语法快捷方式我错过了。无论如何,我想没有这样灵活的动态接口。@正如我所说的,我也不知道这样的语法。我知道find_接口,但需要知道是否有语法快捷方式我错过了。无论如何,我想没有这样灵活的动态语法。@正如我所说的,我也不知道这样的语法。