如何解决"TypeError: __init__()

32 阅读2分钟

在学习Python时,老师要求我们创建一个名为"CustomerInfo"的类,并实现一个无参构造函数,以及用户输入姓名、订单、数量和地址,并创建用于设置和获取这些信息的访问器和修改器方法。但是,当我按照老师给的步骤编写代码时,却遇到了 "TypeError: init() takes 0 arguments but 1 was given" 的错误。

2、解决方案

方法一

我的代码:

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

解决方法: 根据第一个答案,我意识到在Python中,__init__方法需要接受self作为参数,因为它是一个方法。因此,我修改了__init__方法:

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

方法二

第二个答案的回复给了我更多的启发,让我意识到在构造函数中不能直接调用变量。即使在外面的代码中已经声明了变量,但是构造函数中无法直接使用,需要通过相应的set方法来进行修改。而且,我还需要使用getter和setter函数来检索和修改信息

修改后的代码:

class CustomerInfo:

    def __init__(self):
        self.name = ""
        self.order = ""
        self.quantity = 0
        self.address = ""

    def setName(self, newName):
        self.name = newName

    def setOrder(self, newOrder):
        self.order = newOrder

    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 quantity: "))
address = input("Enter your address: ")

customer1 = CustomerInfo()

customer1.setName(name)
customer1.setOrder(order)
customer1.setQuantity(quantity)
customer1.setAddress(address)

print("Name:", customer1.getName())
print("Order:", customer1.getOrder())
print("Quantity:", customer1.getQuantity())
print("Address:", customer1.getAddress())

经过修改之后,代码终于可以正常运行了,并可以正确打印出用户输入的信息。