如何遍历类实例?

时间:2018-03-08 23:52:13

标签: python python-3.x loops oop inheritance

我们说我有一个超类Spam,从那里可以看到很多子类。如何查看其中一个实例的所有实例并引用它们进行数据处理或比较?并不一定要特别关注超类和子类,但我想提一下那些,以防这些和独立类之间有不同的方法。

这似乎是Python编程中一个非常核心的问题,但我无法找到任何能够回答我的具体内容的信息,奇怪的是,除非我使用了错误的术语。

1 个答案:

答案 0 :(得分:1)

您可以使用index() { if ( this.state.index === undefined || !this.state.index.length ) { return null; } const sections = this.state.index.map(this.handleMap); return ( <ul> {sections} </ul> ) } handleMap(elm, i) { const anchor = '#'+elm.label.split(' ').join('_') + '--' + i; return ( <li key={i}> <label><AnchorScroll href={anchor}>{elm.label}</AnchorScroll></label> <ul> { elm.children.map(this.handleMapChildren) } </ul> </li> ); } handleMapChildren(child, i) { let anchor = '#'+child.label.split(' ').join('_') + '--' + i; return ( <li key={i}> <label><AnchorScroll href={anchor}>{child.label}</AnchorScroll></label> <ul> { child.children.map(this.handleMapChildren) } </ul> </li> ); } 跟踪仍然引用的所有实例。

WeakSet

这是一个有效的例子。

from weakref import WeakSet

class Spam:
    _instances = WeakSet()

    def __init__(self, *args, **kwargs):
        self._instances.add(self)

要使上述工作正常,您需要确保在覆盖class SubSpam(Spam): pass x = SubSpam() # Create an instance len(Spam._instances) # 1 x = 0 # Drop reference to this instance len(Spam._instances) # 0 时始终调用超级__init__方法。

__init__

或者,您也可以跟踪class AnotherSubSpam(Spam): def __init__(self): # Do some stuff super().__init__() 方法中不经常覆盖的实例。

__new__