Python:__init__() 需要2个参数(给了3个)

17 投票
5 回答
61449 浏览
提问于 2025-04-16 00:25

我正在写一个程序来查找适配器,并创建了一个叫做“Adapter”的类。当我传入两个参数时,IDLE却给我报错,说我传入了三个!以下是代码和错误信息:

#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

错误信息: 追踪(最近的调用在最后): 文件 "C:\Users\Cody\Documents\Code\Python\Adapter Finder\adapter.py",第 28 行,在 <module> x = Adapter(sideX,sideY) 类型错误:__init__() 需要两个参数(给了三个)

我不明白问题出在哪里,因为我只输入了两个参数啊!

补充:我刚学Python,不过我会Java。 我正在用这个页面作为教程: http://docs.python.org/tutorial/classes.html

5 个回答

5

你的 __init__ 方法应该像这样:

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

方法调用时,自动会把一个叫做'self'的参数作为第一个参数传进去,所以让__init__()看起来像这样:

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

在其他编程语言中,这个过程通常是隐含的,而在Python中必须明确写出来。另外,注意这其实只是告诉方法它属于哪个实例,你不一定非得叫它'self'。

20

是的,提问者确实漏掉了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)

你会发现下面的代码更容易读懂,而且能实现我认为你想要的效果。

撰写回答