嵌套self.\uuuu parent.\uuuu parent的Pythonic快捷方式(语法sugar)__

嵌套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… 我知道

我在Python中有这个例子(使用金字塔框架),我试图检查条件。 代码如下:

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_接口,但需要知道是否有语法快捷方式我错过了。无论如何,我想没有这样灵活的动态语法。@正如我所说的,我也不知道这样的语法。