【问题标题】:TypeError: __init__() takes 0 positional arguments but 1 was givenTypeError: __init__() 接受 0 个位置参数,但给出了 1 个
【发布时间】:2014-11-12 04:55:27
【问题描述】:

我最近刚开始在学校编写代码,并且正在学习如何使用 Python。 我们的老师给了我们这个任务:

  1. 创建一个类并将其命名为“CustomerInfo”。
  2. 创建一个不带参数的构造函数(只有 self )。
  3. 为姓名、订单、数量和地址创建用户输入。
  4. 为名称、订单、数量和地址创建 mutator 方法。
  5. 为名称、订单、数量和地址创建访问器方法。
  6. 创建一个新的 CustomerInfo() 对象并将其命名为“customer1”。
  7. 打印出客户信息。

这是我的代码:

class CustomerInfo:

    def __init__ ():
        self.name = theName
        self.order = theOrder
        self.quantity = theQuantity
        self.address = theAddress

    def setName( self, newName ):
        self.Name = newName
    def setOrder ( self, newModel ):
        self.model = newModel
    def setQuantity ( self, newQuantity ):
        self.quantity = newQuantity
    def setAddress (self, newAddress ):
        self.address = newAddress

    def getName ( self ):
        return self.name
    def getOrder ( self ):
        return self.order
    def getQuantity ( self ):
        return self.quantity
    def getAddress ( self ):
        return self.address

name = input("Enter your name: ")
order = input("Enter your order: ")
quantity = int(input("Enter your quanity: "))
address = input("Enter your address: "))

customer1 = CustomerInfo()

print ( "Name: ", customer1.name)
print ( "Order: ", customer1.order)
print ( "Quanity: ", customer1.quantity)
print ( "Address: ", customer1.address)

但是,我收到以下错误:

TypeError: __init__() takes 0 positional arguments but 1 was given

我按照 cmets 中的描述将(self) 添加到__init__,现在当我运行模块时,输入工作但在我输入姓名、订单、数量和地址后,结果是这样的:

Traceback (most recent call last):
File line 32, in <module>
    customer1 = CustomerInfo()
File line 4, in __init__
    self.name = theName
NameError: name 'theName' is not defined

【问题讨论】:

  • 是的,这是当您忘记 (self,...) arg 到 __init__() 或任何其他方法时收到的消息。
  • 如果直觉上你认为__init__ 不应该接受任何参数,那么请注意__init__ 不会创建一个类的新实例; that's done by __new__ instead。但您可能不需要定义自己的__new__
  • 如果您没有使用 Python 3(从问题中不清楚),您的类应该继承自 object,即 class CustomerInfo(object):
  • @sapi 这真的是他最不担心的事情。
  • @sapi:inputraw_input 的使用建议 Python 3

标签: python class methods typeerror init


【解决方案1】:

__init__ 方法需要在 Python 中接受 self,因为它是一个方法。

变化:

def __init__ ():

收件人:

def __init__ (self):

【讨论】:

    【解决方案2】:

    我不想为您提供确切的代码,因为这是家庭作业,如果您自己找到正确的代码,您会学得更好。我将指出两个要点(在添加 self 之后,已经提到并且您已经添加)应该允许您自己继续编写代码:

    1. 指令说构造函数除了self 之外不应接受任何参数。这意味着该函数没有参数,因此您不能在函数内部引用 theName 之类的内容。这实际上是在寻找一个全局变量,如果有的话,应该很少使用它。
    2. 您没有使用 gettersetter(在您的说明中称为 accessormutator em>) 功能要求您使用的说明。给定一个不带参数的构造函数,这些是继续进行的关键。

    【讨论】:

      【解决方案3】:

      是的,这是当您忘记 (self,...) arg 到 __init__() 或任何其他方法时收到的消息。

      【讨论】:

        猜你喜欢
        • 2015-07-13
        • 2017-04-22
        • 2018-06-21
        • 1970-01-01
        • 2020-06-13
        • 2019-10-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多