小编she*_*ket的帖子

如何以及何时在Python中正确使用weakref

我有一些代码,其中类的实例具有父< - >子引用,例如:

class Node(object):
  def __init__(self):
    self.parent = None
    self.children = {}
  def AddChild(self, name, child):
    child.parent = self
    self.children[name] = child

def Run():
  root, c1, c2 = Node(), Node(), Node()
  root.AddChild("first", c1)
  root.AddChild("second", c2)
Run()
Run Code Online (Sandbox Code Playgroud)

认为这会创建循环引用root,c1并且c2在Run()完成后不会被释放,对吗?那么,如何让它们被释放?我想我可以做点什么root.children.clear(),或者self.parent = None- 但如果我不知道该怎么做呢?

这是使用weakref模块的合适时间吗?什么,我究竟是什么弱反应?该parent属性?该children属性?整个对象?上述所有的?我看到有关WeakKeyDictionary和weakref.proxy的讨论,但我不清楚它们应该如何使用,如果有的话,在这种情况下.

这也是在python2.4上(无法升级).

更新:示例和摘要

weakref-ify的哪些对象取决于哪个对象可以在没有另一个对象的情况下生存,以及哪些对象相互依赖.生命时间最长的对象应包含较短寿命对象的弱化参数.同样,不应该将weakrefs设置为依赖项 - 如果它们是依赖项,依赖项可能会默默地消失,即使它仍然需要.

例如,如果你有一个树结构,root有子节点kids,但可以没有root节点,那么该对象应该使用weakrefs kids.如果子对象依赖于父对象的存在,情况也是如此.下面,子对象需要父对象来计算其深度,因此强对齐parent.kids但是,属性的成员是可选的,因此使用weakrefs来阻止循环引用. …

python circular-reference

49
推荐指数
2
解决办法
1万
查看次数

jekyll 支持 @use sass 语句吗?

根据sass 的说法,该@import声明是针对弃用的,有利于@use,但在 jekyll 文档中只有第一种示例......但是我无法让后者工作!

当我尝试从部分引用变量时_color.sass

$duck-blue: #199
Run Code Online (Sandbox Code Playgroud)

在其他部分中使用 use 语句_nav.sass

@use 'color'

.duckdiv: 
    border: 2px solid color.$duck-blue
Run Code Online (Sandbox Code Playgroud)

Jekyll 抛出以下内容

Error: Invalid CSS after "...2px solid color": expected expression (e.g. 1px, bold), was ".$duck-blue; }"
Run Code Online (Sandbox Code Playgroud)

@use如果我替换为@import并删除color.变量前面的范围,一切都会正常。

我有什么地方搞错了吗?

css sass jekyll

5
推荐指数
1
解决办法
431
查看次数

标签 统计

circular-reference ×1

css ×1

jekyll ×1

python ×1

sass ×1