2014-09-18 4 views
2

Я только что начал писать код в своей школе, и я учусь использовать Python. Наш преподаватель дал нам эту задачу:TypeError: __init __() принимает 0 позиционных аргументов, но 1 дано

  1. Создайте класс и дайте ему имя «CustomerInfo».
  2. Создайте конструктор без параметров (только для себя).
  3. Создайте пользовательские входы для имени, заказа, количества и адреса.
  4. Создайте методы мутатора для имени, порядка, количества и адреса.
  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 

я добавил (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 
+5

Да, это сообщение, которое вы получаете, когда забываете '(self, ...)' arg to '__init __()' или любой другой метод. – smci

+0

Если вы интуитивно думаете, что '__init__' не должны принимать какие-либо аргументы, тогда обратите внимание, что' __init__' не создает новый экземпляр класса; [это делается вместо '__new__' вместо этого] (http://stackoverflow.com/questions/674304/pythons-use-of-new-and-init). Но вам, вероятно, не нужно определять свой собственный '__new__'. – z0r

+0

Если вы не используете Python 3 (что неясно из вопроса), ваш класс должен наследовать от 'object', то есть' class CustomerInfo (object): ' – sapi

ответ

6

Метод __init__ должен принять self в Python, потому что, ну, это метод.

Изменение:

def __init__(): 

To:

def __init__ (self): 
0

Да, это сообщение, которое вы получаете, когда вы забыли (self,...) ARG к __init__() или любому другому методу.

1

Я не хочу предоставлять вам точный код, поскольку это домашнее задание, и вы узнаете лучше, если сами придете к правильному коде. Я укажу две главных точки (после добавления self, который уже упоминались, и вы добавили), что позволит вам приступить к написанию коды самостоятельно:

  1. Инструкция говорит, что конструктор не должен принимать никаких параметров кроме себя. Это означает, что функции нет аргументов, поэтому вы не можете ссылаться на такие вещи, как theName внутри функции. Это ищет по существу переменную , которую редко следует использовать, если вообще когда-либо использовать.
  2. Вы не делаете использование геттерного и сеттера (далее в инструкциях, как аксессора и мутаторных) Функция инструкция просила вас использовать. Это ключ к продолжению с использованием конструктора , который не принимает аргументов.
Смежные вопросы