Форум программистов, компьютерный форум, киберфорум
Python для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/6: Рейтинг темы: голосов - 6, средняя оценка - 4.67
0 / 0 / 0
Регистрация: 15.09.2019
Сообщений: 61

Проблема с классами

12.07.2020, 09:45. Показов 1441. Ответов 8
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте, необходимо заполнить и вывести N-ое количество сотрудников, но почему-то выводится только самый последний сотрудник (его имя). В чём тут проблемка?

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
class People:
    def __init__(self, name):
        self.name = name
 
    def setInfo(self, name):
        self.name = n
 
    def getInfo(self):
        return self.name
 
object = People(name="")
dict_obj = {}
n = int(input("\nВведите количество сотрудников: "))
for i in range(n):
    name = str(input("\nВведите имя сортрудника: "))
    dict_obj[f'name{i}'] = object.setInfo(name)
print("\nСотрудники:\n")
for i in range(n):
    print(object.getInfo())
del object
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
12.07.2020, 09:45
Ответы с готовыми решениями:

Проблема с классами
Возникла проблема при решении задачи, в которой нужно сравнить экземпляры класса. Вот цитата из задачи: "Экземпляры класса можно...

Проблема с классами (возможно с классами)
В общем такое дело. На днях надумал соорудить игру, эдакую экономическую стратегию. И попутно разрабатывая механику наткнулся на ряд...

Проблема с Классами
// VectorClass.cpp : main project file. #include "stdafx.h" #include <iostream> using namespace System; using...

8
Автоматизируй это!
Эксперт Python
 Аватар для Welemir1
7390 / 4817 / 1246
Регистрация: 30.03.2015
Сообщений: 13,667
Записей в блоге: 29
12.07.2020, 09:51
amcs, слабовато, по какой книге занимаешься?

Цитата Сообщение от amcs Посмотреть сообщение
def setInfo(self, name):
        self.name = n
или не верно сюда выложил или этот метод не работает, там нет n

называть переменную object нельзя, угадай почему

Цитата Сообщение от amcs Посмотреть сообщение
name = str(input("\nВведите имя сортрудника: "))
приводить инпут к строке нет смысла, он и так вернет строку

главная проблема в том, что ты один и тот же объект везде суешь а тебе надо новый!

Python
1
dict_obj[f'name{i}'] = People(name)
Цитата Сообщение от amcs Посмотреть сообщение
for i in range(n):
    print(object.getInfo())
не годится, ты выводишь один и тот же объект а тебе надо из твоего словаря все выводить
1
Эксперт PythonЭксперт Java
19530 / 11067 / 2931
Регистрация: 21.10.2017
Сообщений: 23,294
12.07.2020, 09:53
Цитата Сообщение от amcs Посмотреть сообщение
В чём тут проблемка?
Так ты создаешь одного (!) сотрудника, и n раз меняешь ему имя...

Добавлено через 1 минуту

Не по теме:

Welemir1, пулеметчик. Написал портянку, пока я одну строку натыкал


1
0 / 0 / 0
Регистрация: 15.09.2019
Сообщений: 61
12.07.2020, 09:58  [ТС]
Welemir1, а как этот код выглядел бы правильно? Я просто самоучка, многого пока что не понимаю
0
Эксперт PythonЭксперт Java
19530 / 11067 / 2931
Регистрация: 21.10.2017
Сообщений: 23,294
12.07.2020, 10:02
Лучший ответ Сообщение было отмечено amcs как решение

Решение

Я, канешн, не Велемир, но осмелюсь поправить
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
class People:
    def __init__(self, name):
        self.name = name
 
    def setInfo(self, name):
        self.name = name
 
    def getInfo(self):
        return self.name
 
 
dict_obj = {}
n = int(input("\nВведите количество сотрудников: "))
for i in range(n):
    obj = People(name="")
    name = str(input("\nВведите имя сортрудника: "))
    obj.setInfo(name)
    dict_obj[f'name{i}'] = obj
print("\nСотрудники:\n")
for i in range(n):
    print(dict_obj[f'name{i}'].getInfo())
1
Автоматизируй это!
Эксперт Python
 Аватар для Welemir1
7390 / 4817 / 1246
Регистрация: 30.03.2015
Сообщений: 13,667
Записей в блоге: 29
12.07.2020, 10:05
Цитата Сообщение от amcs Посмотреть сообщение
Я просто самоучка
Цитата Сообщение от Welemir1 Посмотреть сообщение
по какой книге занимаешься?
надеюсь не по видео питон учишь?

код нормал выше, хотя я бы класс сократил до 1 инита и назвал бы Person
1
 Аватар для Semen-Semenich
5224 / 3471 / 1173
Регистрация: 21.03.2016
Сообщений: 8,298
12.07.2020, 19:00
сложновато как то. словарь с ключём именем да сам класс который возвращает то же имя. сперва получить объект по имени а потом методом этого же объекта получить его имя. типа лезть в форточку когда рядом открыта дверь.
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
class People:
    
    def __init__(self, name):
        self.name = name
        
    def getInfo(self):
        return self.name
 
 
list_obj = []
n = int(input("\nВведите количество сотрудников: "))
for i in range(n):
    name = input("\nВведите имя сортрудника: ")
    list_obj.append(People(name))
    
print("\nСотрудники:\n")
for obj in list_obj:
    print(obj.getInfo())
0
1732 / 970 / 199
Регистрация: 22.02.2018
Сообщений: 2,693
Записей в блоге: 6
12.07.2020, 20:48
Semen-Semenich, Ваш код выведет имена всех сотрудников. И хотя в условии не требуется оперировать с определенным сотрудником, но как-то не очень хорошо для обучения создавать экземпляры класса (то есть сотрудников) не создавая переменные, через которые можно было бы обращаться к конкретному сотруднику. Хотя к конкретному сотруднику можно обратится по смещению в списке, но если список будет нарушен, то к конкретному сотруднику уже не обратиться. Конечно можно список превратить в словарь, использовав в качестве ключей имена сотрудников. Еще вариант, динамически создавать переменные с именами соответствующими именам сотрудников. и этим переменным присваивать ссылку на экземпляр класса для этого сотрудника. Но это так, небольшое размышление на придание универсальности коду. Что касается решения по данному условию, то оно полностью ему удовлетворяет.

Добавлено через 3 минуты
Поэтому решение iSmokeJC, с созданием словаря более корректное.
0
Эксперт PythonЭксперт Java
19530 / 11067 / 2931
Регистрация: 21.10.2017
Сообщений: 23,294
12.07.2020, 21:01

Не по теме:

Viktorrus, это решение ТСа, а не мое, я только подправил

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
12.07.2020, 21:01
Помогаю со студенческими работами здесь

Проблема с классами
Здравствуйте. Делаю курсовую работу по ООП . Ниже приведу текст задания: Модуль предназначен для использования работниками агентства. В...

Проблема с классами
Есть у меня данный класс using System; using System.Collections.Generic; using System.Linq; using System.Text; using...

Проблема с классами c++
Здравствуйте! Помогите, пожалуйста, сделать следующее. 1. В проге нужно перенести часть кода из основной программы в метод класса. ...

Проблема с классами
Написал такой код, но он неправильный ( может и правильно, но выдает не то). using System; using System.Collections.Generic; ...

Проблема с классами
Всем привет! Решил вспомнить, некогда изучавшийся, С++ и .... Подскажите Main.cpp ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru