【发布时间】:2014-11-12 04:55:27
【问题描述】:
我最近刚开始在学校编写代码,并且正在学习如何使用 Python。 我们的老师给了我们这个任务:
- 创建一个类并将其命名为“CustomerInfo”。
- 创建一个不带参数的构造函数(只有 self )。
- 为姓名、订单、数量和地址创建用户输入。
- 为名称、订单、数量和地址创建 mutator 方法。
- 为名称、订单、数量和地址创建访问器方法。
- 创建一个新的 CustomerInfo() 对象并将其命名为“customer1”。
- 打印出客户信息。
这是我的代码:
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:
input与raw_input的使用建议 Python 3。
标签: python class methods typeerror init