使用以下程序:
from traits.api import HasTraits, Int, Instance
from traitsui.api import View
class NewView(View):
def __del__(self):
print('deleting NewView')
class A(HasTraits):
new_view = Instance(NewView)
def __del__(self):
print('deleting {}'.format(self))
a = Int
def default_traits_view(self):
new_view = NewView('a')
return new_view
Run Code Online (Sandbox Code Playgroud)
赛跑
a = A()
del(a)
Run Code Online (Sandbox Code Playgroud)
回报
deleting <__main__.A object at 0x12a016a70>
Run Code Online (Sandbox Code Playgroud)
正如它应该.
如果我做
a = A()
a.configure_traits()
Run Code Online (Sandbox Code Playgroud)
关闭对话框后:
del(a)
Run Code Online (Sandbox Code Playgroud)
我有同样的信息:
deleting <__main__.A object at 0x12a016650>
Run Code Online (Sandbox Code Playgroud)
没有提到要删除的NewView.
在Geneal中,使用Traits和TraitsUI避免内存泄漏的良好做法是什么?
以下代码不起作用:
from traits.api import HasTraits, Enum
class A(HasTraits):
enum = Enum(1,2,3)
class B(A):
def __init__(self):
self.trait('enum').default_value = ['one','two','three']
b = B()
b.configure_traits()
Run Code Online (Sandbox Code Playgroud)
下拉列表中没有选择['一','二','三'],它仍然是[1,2,3]。有没有办法在声明一次后以任何方式修改枚举内容?
floor(-1e-14 % 2)
Out[1]: 1.0
floor(-1e-16 % 2)
Out[2]: 2.0
Run Code Online (Sandbox Code Playgroud)
我明白这-1e-16可能太靠近了0,但% 2操作后的地板结果绝对不应该是2(0或1)!