在学习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())
经过修改之后,代码终于可以正常运行了,并可以正确打印出用户输入的信息。