小编Ian*_*Ian的帖子

有人可以解释方法属性上的Python hasattr/delattr吗?

我有一些奇怪的行为造成的错误.我可能从根本上缺少一些关于函数属性语义的东西.或者它可能是一个错误.我上线了

$ python
Python 2.7.1+ (r271:86832, Apr 11 2011, 18:13:53) 
[GCC 4.5.2] on linux2
Run Code Online (Sandbox Code Playgroud)

首先,我定义一个类,并为其中一个方法添加一个属性.

>>> class Foo(object):
...    def bar(self):
...        pass
...    bar.xyzzy = 'magic'
...
Run Code Online (Sandbox Code Playgroud)

现在我可以看到它存在 Foo.bar

>>> hasattr(Foo.bar, 'xyzzy')
True
Run Code Online (Sandbox Code Playgroud)

我可以找回它.

>>> Foo.bar.xyzzy
'magic'

>>> getattr(Foo.bar, 'xyzzy')
'magic'
Run Code Online (Sandbox Code Playgroud)

但我不能删除它.

>>> del Foo.bar.xyzzy
Traceback (most recent call last):
   ...
AttributeError: 'instancemethod' object has no attribute 'xyzzy'

>>> delattr(Foo.bar, 'xyzzy')
Traceback (most recent call last):
   ...
AttributeError: 'instancemethod' object has no attribute 'xyzzy'
Run Code Online (Sandbox Code Playgroud)

有什么想法吗?我认为这与在Foo.bar这里被报告为'instancemethod' 的事实有关,而不是如果你只是问什么Foo.bar …

python

3
推荐指数
2
解决办法
4482
查看次数

Javascript让对象相互依赖

这是一个丑陋的Javascript,很高兴找到一个解决方法.

Javascript没有类,这是一件好事.但它以一种相当丑陋的方式实现了对象之间的回退.基础构造应该有一个对象,当一个属性找不到时,它会回落到另一个对象.

因此,如果我们想要a回归,b我们会想做一些事情:

a = {sun:1};
b = {dock:2};
a.__fallback__ = b;
Run Code Online (Sandbox Code Playgroud)

然后

a.dock == 2;
Run Code Online (Sandbox Code Playgroud)

但是,Javascript代替了new运营商和prototypes.所以我们做得不那么优雅:

function A(sun) {
   this.sun = sun;
};
A.prototype.dock = 2;
a = new A(1);

a.dock == 2;
Run Code Online (Sandbox Code Playgroud)

但除了优雅之外,它的功能也严格不足,因为它意味着用A创建的任何内容都会获得相同的后备对象.

我想要做的是从这个人为限制中解放Javascript,并且能够将任何其他单个对象作为其后备对象提供给任何单个对象.这样我可以在有意义时保持当前行为,但在有意义时使用对象级继承.

我最初的方法是创建一个虚拟构造函数:

function setFallback(from_obj, to_obj) {
    from_obj.constructor = function () {};
    from_obj.constructor.prototype = to_obj;
}

a = {sun:1};
b = {dock:2};
setFallback(a, b);
Run Code Online (Sandbox Code Playgroud)

但不幸的是:

a.dock == undefined;
Run Code Online (Sandbox Code Playgroud)

任何想法为什么这不起作用,或任何解决方案的实施setFallback

(我在V8上运行,通过node.js,以防这是依赖于平台的) …

javascript inheritance v8

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

Node.js REPL 延续行

当使用node.js repl时,有没有办法退出节点过度热衷的连续行?

例如:

$ node
> {- -}
... 
Run Code Online (Sandbox Code Playgroud)

几乎您可以输入的所有内容都会为您提供另一条延续线。Ctrl+D 退出整个 repl。

显然我不想一直打字{- -},但我确实发现在使用 repl 进行实验时经常输入错误的内容。然后我必须退出 repl,并释放内存中的所有位。

node.js read-eval-print-loop

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

使用const的C++模板专业化

我显然误解了关于模板特化的重要事项,因为:

template<typename type> const type getInfo(int i) { return 0; }
template<> const char* getInfo<char*>(int i) { return nullptr; }
Run Code Online (Sandbox Code Playgroud)

无法编译:

src/main.cpp:19:24: error: no function template matches function
        template specialization 'getInfo'
Run Code Online (Sandbox Code Playgroud)

template<typename type> type getInfo(int i) { return 0; }
template<> char* getInfo<char*>(int i) { return nullptr; }
Run Code Online (Sandbox Code Playgroud)

工作良好.如何使用const模板专业化?我的菜鸟错误是什么?

我在clang ++上使用c ++ 11.

c++ templates template-specialization

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

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