Попытка создать объект через вход пользователя

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

 class employee(object): def __init__(self,name,pay_rate,monday,tuesday,wednesday,thursday,friday,saturday,sunday): self.create_employee() self.name = name self.pay_rate = pay_rate self.monday = monday self.tuesday = tuesday self.wednesday = wednesday self.thursday = thursday self.friday = friday self.saturday = saturday self.sunday = sunday def weekly_total(self): self.total_weekly_hours = self.monday + self.tuesday + self.wednesday + self.thursday + self.friday + self.saturday + self.sunday self.emp_name() print "\n Your hours this week are:", self.total_weekly_hours,"\n" def emp_name(self): print "\n Current employee is: ",self.name def create_employee(self): self.name = raw_input("Enter new employee name") self.pay = input("Enter pay rate") self.monday = raw_input("Enter monday hours") self.tuesday = raw_input("tuesday hours?") self.wednesday = raw_input("wed hours?") self.thursday = raw_input("Thursday hours?") self.friday = raw_input("Friday hours?") self.saturday = raw_input("saturday hours?") self.sunday = raw_input("sunday hours?") self.object_name = raw_input("Name your object") self.object_name = employee(self.name,self.pay,self.monday,self.tuesday,self.wednesday,self.thursday,self.friday,self.saturday,self.sunday) print self.name, " was created" 

3 Solutions collect form web for “Попытка создать объект через вход пользователя”

В вашем текущем коде есть бесконечный цикл, поскольку __init__ и create_employee называют друг друга. Вы принимаете аргументы для всех атрибутов в инициализаторе, затем игнорируете их и запрашиваете ввод пользователя, который вы передаете инициализатору для нового объекта, который игнорирует его и …

Я думаю, что вам нужна структура, более похожая на:

 class Employee(object): # PEP-8 name def __init__(self, name, pay, hours): # assign instance attributes (don't call from_input!) def __str__(self): # replaces emp_name, returns a string @property def weekly_total(self): return sum(self.hours) @classmethod def from_input(cls): # take (and validate and convert!) input return cls(name, pay, hours) 

Который вы можете использовать как:

 employee = Employee("John Smith", 12.34, (8, 8, 8, 8, 8, 0, 0)) print str(employee) # call __str__ 

Или:

 employee = Employee.from_input() print employee.weekly_total # access property 

Обратите внимание, что вместо того, чтобы иметь отдельные атрибуты экземпляра для разных дней, я допустил один список / набор часов для каждого дня. Если имена дней важны, используйте словарь {'Monday': 7, ...} . Помните, что все raw_input – это строка, но вы, вероятно, хотите часов и платите как float; для получения дополнительной информации о проверке ввода см. здесь .

Причина, по которой это не выполняется, заключается в том, что вы определили класс, но тогда нет ничего, что создавало бы этот класс, поэтому при его запуске ничего не происходит.

Однако, если вы хотите добавить этот код для создания экземпляра класса, скажите:

 e = employee() e.create_employee() 

вы столкнулись бы с ошибками, вызванными круговой природой кода, как упоминалось в @jonrsharpe.

Вы можете перемещать create_employees вне класса и быть оболочкой, которая принимает вход (в обычные переменные или dict , но не сам класс) и создает экземпляр объекта с использованием этого ввода. Затем вы можете вызвать эту функцию из основной части скрипта.

Я бы порекомендовал читать через Python doc классы, чтобы вы могли лучше ознакомиться с парадигмой OO :

https://docs.python.org/2/tutorial/classes.html

Я думаю, вам нужно что-то вроде этого

 class employee(object): def __init__(self,name,pay_rate,monday,tuesday,wednesday,thursday,friday,saturday,sunday): self.name = name self.pay_rate = pay_rate self.monday = monday self.tuesday = tuesday self.wednesday = wednesday self.thursday = thursday self.friday = friday self.saturday = saturday self.sunday = sunday @staticmethod def create_from_rawinput(): return employee( raw_input("Employee name:"), raw_input("Pay Rate:"), raw_input("Enter monday hours:"), raw_input("Enter tuesday hours:"), raw_input("Enter wednesday hours:"), raw_input("Enter thursday hours:"), raw_input("Enter friday hours:"), raw_input("Enter saturday hours:"), raw_input("Enter sunday hours:") ) new_emp = employee.create_from_rawinput() 
Python - лучший язык программирования в мире.