2010-06-25 147 views
16

我正在编写一个程序来查找适配器,并且创建了一个名为'Adapter'的类。当我传入两个参数时,IDLE给我一个错误,说我通过了三个!下面是代码和堆栈跟踪:Python:__init __()需要2个参数(给出3个)

#This is the adapter class for the adapter finder script 

class Adapter: 
    side1 = (None,None) 
    side2 = (None,None) 
    '''The class that holds both sides of the adapter''' 
    def __init__((pType1,pMF1),(pType2,pMF2)): 
     '''Initiate the adapter. 

     Keyword Arguments: 
     pType1 -- The passed type of one side of the adapter. ex: BNC, RCA 
     pMF1 -- The passed gender of pType1. ex: m, f 

     pType2 -- The passed type of one side of the adapter. ex: BNC, RCA 
     pMF2 -- The passed gender of pType2. ex: m, f 

     ''' 

     print 'assigining now' 
     side1 = (pType1,pMF1) 
     print side1 
     side2 = (pType2,pMF2) 
     print side2 

sideX = ('rca','m') 
sideY = ('bnc','f') 

x = Adapter(sideX,sideY) 
print x.side1 
print x.side2 

错误: Traceback (most recent call last): File "C:\Users\Cody\Documents\Code\Python\Adapter Finder\adapter.py", line 28, in <module> x = Adapter(sideX,sideY) TypeError: __init__() takes exactly 2 arguments (3 given)

我不明白是什么问题,因为我只进入有两个参数!

编辑:我是新来的Python语言,但我知道Java。 我使用这个页面作为教程:http://docs.python.org/tutorial/classes.html

+2

您对__init__的定义是错误的。你正在使用什么教程?你为什么写这个?为什么你会忽略'self'变量?请包括您正在使用的教程的名称或链接。 – 2010-06-25 01:39:47

+4

您在参数列表中使用元组表达式是非常不习惯的Python,会混淆很多人。我建议你不要这样做,特别是因为你只是把它们分配给其他东西。请不要使用非常奇怪但奇怪的Python构造,除非你有一个非常奇妙的理由。 – Omnifarious 2010-06-25 01:51:34

+0

不同的人学习方式不同,你可能会发现diveintopython.org比docs.python.org更合适 – msw 2010-06-25 04:05:57

回答

19

是的,OP无缘self,但我甚至不知道这些元组,作为论点的意思是,我故意不费心去弄清楚,它只是一个糟糕的建设。

Codysehi,请与对比代码:

class Adapter: 
    def __init__(self, side1, side2): 
     self.side1 = side1 
     self.side2 = side2 

sideX = ('rca', 'm') 
sideY = ('bnc', 'f') 
x = Adapter(sideX, sideY) 

,并认为它是两个更具可读性,并做什么,我想你打算。

+0

谢谢!我对python的介绍并没有像希望的那样顺利:P 现在我更愿意将两个变量作为列表传入。 – codysehl 2010-06-25 03:17:36

+0

我发现Python一开始让人感到扑朔迷离,而且这是带着几十种语言的。有用的nitpick:'sideX'绑定到一个元组'()',它是不可变的,而不是可变的列表[[]'。 – msw 2010-06-25 04:00:46

5

__init__应该是这样的:

def __init__(self,(pType1,pMF1),(pType2,pMF2)): 
13

方法调用自动获得一个“自我”参数作为第一个参数,所以要__init__()看如:

def __init__(self, (pType1,pMF1),(pType2,pMF2)): 

这通常隐含在其他语言中,在Python中它必须是显式的。还要注意,它实际上只是一种告知所属实例方法的方法,您不必称之为“自我”。

+1

在[Classes](http://docs.python.org/tutorial/classes.html)的Python文档中有进一步解释, – 2010-06-25 01:57:43

+0

要在第一行中正确显示__init__,则需要在其周围放置反引号。否则,双下划线使其大胆 – 2010-06-25 02:02:04

4

看起来这是Python向所有学习语言的人问好的方式。一种Python的第一口。

您必须在实例方法中指定self作为第一个参数。所以它应该是。

def __init__(self, (pType1,pMF1),(pType2,pMF2)): 
相关问题