我们说我有一个超类Spam
,从那里可以看到很多子类。如何查看其中一个实例的所有实例并引用它们进行数据处理或比较?并不一定要特别关注超类和子类,但我想提一下那些,以防这些和独立类之间有不同的方法。
这似乎是Python编程中一个非常核心的问题,但我无法找到任何能够回答我的具体内容的信息,奇怪的是,除非我使用了错误的术语。
答案 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__