2014-02-23 50 views
-2

我有一类像下面缺少的参数

class A: 
    def __init__(self:A,size:int): 
     self.size=size 

当我输入这样的:

>>>a=A(5)  
>>>a.size 

它会

>>>5 

然而,当我输入这样的:

>>>A.__init__(5) 

它将有一个缺少参数“大小”错误。我只是不明白,为什么我进入一个初始化它仍然失踪的论点?

+2

'(self:A,size:int)'不能。 –

+0

'self:A'应该引发一个错误,因为'__init__'被定义时'A'没有被定义。 –

回答

3

__init__需要两个参数,self和一个整数。不是那么简单吗?

对于实例方法,Python会自动将实例的引用传递给你的函数。这就是为什么所有实例方法至少需要一个参数self

这是您的情况:

>>> class A: 
    def __init__(self):: 

SyntaxError: invalid syntax 
>>> class A: 
    def __init__(self): 
     print("Created!") 


>>> a = A() 
Created! #Success 
>>> b = A.__init__() 
Traceback (most recent call last): 
    File "<pyshell#13>", line 1, in <module> 
    b = A.__init__() 
TypeError: __init__() missing 1 required positional argument: 'self' 

嗯,难怪。 __init__需要一个参数,但你没有传递任何东西。

但是,如果你坚持要调用该函数,你可以使用另一个实例:

>>> b = A.__init__(a) 
Created! 

然而,这仅仅是调用函数,并没有新的实例会产生。 bNone

+0

@编辑:谢谢,但这对OP来说是一个很好的评论。 – aIKid

+0

好吧,我明白了。但是当我进入A .__ init __(5)为什么它缺少大小参数而不是自己? – user1813564

+1

因为参数是位置的;它假定第一个是'self',所以'size'必须丢失。 – jonrsharpe

1

__init__是Python中的构造函数;阅读这question的答案,其中详细解释了这个概念。

为了在Python中的类中调用函数(或“方法”),您需要一个classmethod;这个answer解释了classmethod与Python中的实例方法的作用。

的主要区别在于:

  • 用于类方法的类的第一个参数的classmethod通过,
  • 为实例方法,该实例本身被作为第一个参数传递给该方法