缺少的论点

时间:2014-02-23 15:02:28

标签: python class

我有一个类似下面的课程

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

当我输入时:

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

它会来

>>>5

然而,当我输入如下:

>>>A.__init__(5)

它将缺少参数'size'错误。我只是不明白,为什么我进入一个init仍然缺少参数?

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:1)

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

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

主要区别在于:

  • 对于类方法,该类作为第一个参数传递给classmethod
  • 例如方法,实例本身作为方法
  • 的第一个参数传递