Python调用具有错误参数数量的类方法

Hus*_*ain 1 python oop parameters methods

我刚开始学习python.我编写了一个示例脚本来测试python中的OOP,但是发生了一些非常奇怪的事情.当我调用类方法时,Python使用的参数多于给定的参数.

这是代码:


1.  class Bar:
2.   num1,num2 = 0,0
3.   def __init__(num1,num2):
4.    num1,num2 = num1,num2
5.   def foo():
6.    if num1 > num2:
7.     print num1,'is greater than ',num2,'!'
8.    elif num1 is num2:
9.     print num1,' is equal to ',num2,'!'
10.   else:
11.    print num1,' is less than ',num2,'!'
12. a,b = 42,84
13. t = Bar(a,b)
14. t.foo
15. 
16. t.num1 = t.num1^t.num2
17. t.num2 = t.num2^t.num1
18. t.num1 = t.num1^t.num2
19. 
20. t.foo
Run Code Online (Sandbox Code Playgroud)

我得到的错误信息:


python test.py
Traceback (most recent call last):
  File "test.py", line 13, in 
t = Bar(a,b)
TypeError: init() takes exactly 2 arguments (3 given) 
Run Code Online (Sandbox Code Playgroud)

有人可以帮忙吗?
提前致谢

Ign*_*ams 7

传递给实例方法的第一个参数是实例本身.通常self在定义函数时调用它:

  def __init__(self, num1, num2):
Run Code Online (Sandbox Code Playgroud)

考虑阅读教程.


bch*_*rry 5

情侣:

  1. 你的班级被命名,Bar但你称之为bar(a, b).改变它来Bar(a, b)解决这个问题.
  2. 类需要从某些东西继承(如果没有,那么object).你需要class Bar(object):
  3. Python中的实例方法总是在其他传递参数之前提供一个参数,即对象本身.所以你def __init__(num1, num2):应该是def __init__(self, num1, num2):,同样的def foo().
  4. 所有实例变量都需要加上前缀self..所以num1应该是self.num1
  5. ^操作是布尔XOR.不确定这是否是你想要的,它经常与电源操作员混淆**.

这是你的例子,清理并相应地修复:

class Bar(object):
    num1, num2 = 0, 0
    def __init__(self, num1, num2):
        self.num1, self.num2 = num1, num2

    def foo(self):
        if self.num1 > self.num2:
            print self.num1,'is greater than ',self.num2,'!'
        elif self.num1 is self.num2:
            print self.num1,' is equal to ',self.num2,'!'
        else:
            print self.num1,' is less than ',self.num2,'!'

a, b = 42, 84
t = Bar(a, b)
t.foo()

t.num1 = t.num1 ^ t.num2
t.num2 = t.num2 ^ t.num1
t.num1 = t.num1 ^ t.num2

t.foo()
Run Code Online (Sandbox Code Playgroud)

结果如下:

42  is less than  84 !
84 is greater than  42 !
Run Code Online (Sandbox Code Playgroud)