相关疑难解决方法(0)

如何测试函数的平等性或身份?

我希望能够测试两个可调用对象是否相同.我更喜欢身份语义(使用"是"运算符),但我发现当涉及方法时,会发生不同的事情.

#(1) identity and equality with a method
class Foo(object):
    def bar(self):
        pass
foo = Foo()
b = foo.bar
b == foo.bar    #evaluates True. why?
b is foo.bar    #evaluates False. why?
Run Code Online (Sandbox Code Playgroud)

我用Python 2.7和3.3(CPython)重现了这一点,以确保它不是旧版本的实现细节.在其他情况下,身份测试按预期工作(翻译会议从上面继续):

#(2) with a non-method function
def fun(self):
    pass
f = fun
f == fun    #evaluates True
f is fun    #evaluates True

#(3) when fun is bound as a method 
Foo.met = fun
foo.met == fun    #evaluates False
foo.met is fun    #evaluates False

#(4) with a callable data …
Run Code Online (Sandbox Code Playgroud)

python

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

pyqt断开插槽.新风格

我为此分配了一个插槽.

...
self.query = QtGui.QLineEdit(self)            
self.query.textChanged.connect(lambda: self.makeThread(self.googleSearch()))
self.query.returnPressed.connect(lambda: self.launchNavigator(1))
...
Run Code Online (Sandbox Code Playgroud)

但我怎么能断开连接?我试过这个,但它不起作用......

self.query.textChanged.disconnect(lambda: self.makeThread(self.googleSearch()))
self.query.returnPressed.disconnect(lambda: self.launchNavigator(1))
Run Code Online (Sandbox Code Playgroud)

python signals pyqt disconnect slot

7
推荐指数
2
解决办法
5243
查看次数

为什么`instance_of_object.foo是instance_of_object.foo`评估为False?

如果我有

class A:
  def foo(self):
    pass
Run Code Online (Sandbox Code Playgroud)

这评估为True:

getattr(A, 'foo') is A.foo
Run Code Online (Sandbox Code Playgroud)

但这评估为False:

a = A()
getattr(a, 'foo') is a.foo
Run Code Online (Sandbox Code Playgroud)

同样如此

a.foo is a.foo
Run Code Online (Sandbox Code Playgroud)

为什么?

我找到了getattr(a, 'foo'),a.foo两者都代表了

<bound method A.foo of <__main__.A object at 0x7a2c4de10d50>>)
Run Code Online (Sandbox Code Playgroud)

所以没有暗示....

python introspection

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

标签 统计

python ×3

disconnect ×1

introspection ×1

pyqt ×1

signals ×1

slot ×1