2012-02-06 27 views
2

我遇到了Python无法解决的有趣情况。我有一个功能 定义在一个类内,如 def a(self, x, y):,它已从其他地方调用,如a(par1, par2)。但是,会发生什么情况是par1被替换而不是selfpar2而不是xy未被初始化。但是,情况并非如此:par1par2应该分别替换为xy,Python应该自己取得self。这在Python 2.7中正常工作,但是这个有趣的事情发生在3.2中。方法a没有任何修饰符,但是我从中调用它的方法有修饰符@classmethod。这有点奇怪,也许@classmethod在第三个版本中改变了。如果有人知道正在发生什么或如何使事情正常工作,请告诉。Python将其中一个参数代入自我

谢谢!

+1

你应该打电话给''''如' .a(par1,par2)'? – ajwood 2012-02-06 19:40:11

+3

你能展示一个你的代码是什么样子的完整例子吗? – SingleNegationElimination 2012-02-06 19:40:17

+8

你能提供一个完整的,可运行的行为例子吗? – Kevin 2012-02-06 19:40:41

回答

0

从你的描述我猜类似的代码如下:

class Test(object): 

    def a(self, par1, par2='empty'): 
     print(self, par1, par2) 

    @classmethod 
    def b(cls, fjord): 
     print(fjord) 
     cls.a('par1', 'par2') 

test = Test() 
test.a('this', 'that') 
test.b('cold') 

在2.7这个崩溃像这样:

(<__main__.Test object at 0x00B4A710>, 'this', 'that') 

cold 

Traceback (most recent call last): 
    File "test.py", line 11, in <module> 
    test.b('cold') 
    File "test.py", line 7, in b 
    cls.a('par1', 'par2') 
TypeError: unbound method a() must be called with Test instance as first argument 
      (got str instance instead) 

而在3.2它工作得很好 - 因为非绑定方法没有更长久的存在,它们只是功能。

self不是实例的原因正是因为它是从类方法中调用的:类方法没有得到self,所以它不能传递它。

+0

这就是我开始想的,但是声明是代码在2.7中工作,但在3.2中失败。 – 2012-02-06 21:23:11

+0

也许,虽然它失败了,但TypeError被抓到别的地方 – 2012-02-06 21:23:33

相关问题