<p>如果所有的东西都是python中的对象,那么为什么下面的方法不起作用?你知道吗</p>
<pre><code>class Hello(object):
def hello(self):
print(x)
h = Hello()
h.hello.x = "hello world"
</code></pre>
<p>当我这样做时,我得到:</p>
<pre><code>AttributeError: 'instancemethod' object has no attribute 'value'
</code></pre>
<p>我能做到这一点的一种方法是使用partial,但是我不确定这会对一个对象产生什么影响。有没有别的方法可以达到这个目的?你知道吗</p>
<pre><code>from functools import partial
class Hello(object):
def hello(self, x):
print(x)
h = Hello()
newMethod = partial(h.hello, "helloworld")
newMethod()
</code></pre>
<p>好的,从下面的评论来看,人们想要一个“真实”的场景一个例子可以被认为是如下所示:</p>
<pre><code>file.txt contains the following list
["ItemID1", "ItemID2", "ItemID3", "ItemID4"]
def BindMethods(self):
# ["ItemID1", "ItemID2", "ItemID3", "ItemID4"]
items = readFromFile("file.txt")
self.bind(AN_EVENT, GenericMethod)
def GenericMethod(self, i, event):
# The person calling this method knows that the method
# only accepts a single argument, not two.
# I am attempting to preserve the interface which I do not have control over
data = generateDataFromID(i)
table[i] = data
</code></pre>
<p>这里的想法是将一个方法绑定到一个事件,调用方希望该方法具有特定的签名,即单个输入参数。你知道吗</p>
<p>但是在绑定的时候,您需要将一些额外的信息传递给处理程序。你不知道你要传递多少信息,因为它是可变的。你知道吗</p>
<p>同一事物的扩展/编译时版本如下:</p>
<pre><code>file.txt contains the following list
["ItemID1", "ItemID2", "ItemID3", "ItemID4"]
def BindMethods(self):
# ["ItemID1", "ItemID2", "ItemID3", "ItemID4"]
items = readFromFile("file.txt")
self.bind(AN_EVENT, self.Item1Method)
self.bind(AN_EVENT, self.Item2Method)
self.bind(AN_EVENT, self.Item3Method)
......
def Item1Method(self, event):
data = generateDataFromID("Item1")
table["Item1ID"] = data
def Item2Method(self, event):
data = generateDataFromID("Item2")
table["Item2ID"] = data
</code></pre>