Уведомления

Группа в Telegram: @pythonsu

#1 Дек. 22, 2023 22:13:55

Niketh75
Зарегистрирован: 2023-12-22
Сообщения: 1
Репутация: +  0  -
Профиль   Отправить e-mail  

Работа с классами

Необходимо создать класс, у которого будет несколько полей, для каждого поля сделать геттер и сеттер с проверками передаваемых данных.Одно из полей сделать словарем и еще одно списком.

Попытался сам что-то накалякать, но нет понимания, как работать со словарем в классе

 class Info:
    def __init__(self, city, mother, father):
        self.__parents = {"Мать":mother,"Отец":father}
        #self.__subjects = [sub1, sub2, sub3]
        self.__city = city
    def set_city(self, city):
        if type(city) == str:
            self.__city = city
            print("Город " + self.__city)
        else:
            raise ValueError("Название города должно быть строкой!")
    def get_city(self):
        return self.__city
    def get_parname(self, mother, father):
        if (type(mother) and type(father)) == str:
            mother = self.mother
            father = self.father
            print(self.__parents["Мать"], self.__parents["Отец"])
            print("Город " + self.__city)
        else:
            raise ValueError("Название города должно быть строкой!")
#student_1 = Info("Город N")
#student_1.set_city("Москва")
student_1 = Info("Город N", "Имя1", "Имя2")
student_1.get_parname("name1", "name2")

Отредактировано Niketh75 (Дек. 22, 2023 22:15:14)

Офлайн

#2 Дек. 23, 2023 03:44:40

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9731
Репутация: +  843  -
Профиль   Отправить e-mail  

Работа с классами

Niketh75
Необходимо создать класс
Niketh75
Попытался сам что-то накалякать, но нет понимания, как работать со словарем в классе
Ну из кода видно, что у тебя нет вообще каких-либо знаний основ даже. Ты точно по себе курс взял?

Вот, например,
Niketh75
  
if (type(mother) and type(father)) == str:
Операция and не работает так. Да и без операции and тип проверяется не так.

Тут вот тоже
Niketh75
  
    def get_parname(self, mother, father):
Этих аргументов не должно быть у метода.

Niketh75
Необходимо создать класс, у которого будет несколько полей, для каждого поля сделать геттер и сеттер с проверками передаваемых данных.Одно из полей сделать словарем и еще одно списком.
Ну не знаю, задание вроде простое. Но ты его вообще даже приблизительно не сделал. Так что рановато ты за классы взялся.

Лучше напиши программу, которая выводит ёлочку на экран в виде текстовых символов. Оно гораздо полезнее будет для тебя. В общем, напиши программу, которая что-то делает. Никто не будет тебя умным считать, если ты слово class будешь писать в питоне. Людям, которые не в теме, тебе просто нечего будет показывать, так как для каких-то видимых результатов слова class недостаточно, так как надо ещё знать и то, зачем и когда его писать. А люди, которые в теме, будут просто пальцем у виска крутить, так как видно, что ты просто слово class пишешь и даже не знаешь, для чего и зачем это делать надо.

С функциями ты работать не умеешь. Базовые операции ты не знаешь. Про классы и объекты ты не подозреваешь даже.

Например, любая строка - это объект класса Строки. Класс Строки охватывает все строки, потому что все строки являются одинаковыми по структуре и поведению объектами. Любой словарь - это объект класса Словари. Класс Словари охватывает все словари, потому что все словари являются одинаковыми по структуре и поведению объектами. Всего этого ты не видишь, потому что не знаешь теории. Например, функция print() - это объект класса Функции. Класс Функции охватывает все функции, потому что все функции являются одинаковыми по структуре и поведению объектами.

Зачем это всё надо видеть и понимать? Да вот это всё к тому, что объектно-ориентированная программа представляет из себя такое множество объектов, взаимодействующих между собой с помощью сообщений, передаваемых от одного объекта другому объекту. В питоне такая передача сообщений между объектами реализована с помощью методов объектов. Так как каждый объект принадлежит какому-то классу таких объектов, метод объекта описывается в классе объектов и таким образом все экземпляры этого класса получают этот метод в одном и том же виде.

Зачем это все надо понимать? Да чтобы при создании собственных классов понимать, как экземпляры этих классов будут получать сообщения и какие реакции на эти сообщения они будут выдавать (выдавать в ответ или выдвавать куда-то дальше).

А у тебя класс Info что описывает? Вот берём один экземпляр этого класса - один объект класса Info. Дальше что? Что мы можем сказать этому объекту? какое сообщение мы можем послать ему? что мы от него ждём? какой ответ или какую реакцию?

Я вот что-то не вижу у тебя этого понимания.

А нужно представить этот объект класса Info и сказать ему: 1) запиши мать себе и запомни её; 2) запиши отца себе и запомни его; 3) запиши город себе и запомни его; 4) вспомни мать и скажи мне её имя; 5) вспомни отца и скажи мне его имя; 6) вспомни город и скажи мне его название.

Кто-то же будет с этим объектом взаимодействовать и посылать ему эти сообщения. Этот объект просто как записная книжка работает. Например, подошёл к нему один объект преподаватель и говорит “запиши себе мать и запомни её”, а потом подходит к нему другой объект директор и говорит “вспомни свою мать и скажи мне её имя”. Таким образом объект преподаватель и объект директор передали информацию через этот объект класса Info. При этом объект класса Info не знает, как зовут директора или сколько там преподавателей работает и кто кому вообще через него данные передаёт. Он просто хранит и выдаёт данные посредством приходящих к нему сообщений и больше ничего не делает и ничего не знает. Они там все такие (разбирающиеся только в своей области ответственности и всё и ни в чём больше), и ты из них из всех строишь разные конструкции, которые называются механизмами.

Потом ты можешь сделать объект секретарь и передать ему объект портфель, в котором лежат объекты класса Info с разными записанными именами внутри них. И объект секретарь может взять этот объект портфель и понести этот объект портфель в другой корпус университета и там отдать другому объекту секретарю. И вот второй объект секретарь может положить все объекты класса Info с одного города в другой объект портфель для того же города. Получается таким образом, что у тебя есть одинаковые секретари, есть одинаковые портфели. И когда они есть одинаковые, ты можешь их собрать в один класс. Так у тебя появляется класс Секретари. Так у тебя появляется класс Портфели. У секретаря есть набор сообщений, которые он распознаёт: 1) возьми портфель; 2) иди в другой корпус университета; 3) отдай портфель. У портфеля есть набор сообщений, которые он распознаёт: 1) сохрани объект пирожок; 2) дай объект пирожок; 3) сохрани объект класса Info; 4) дай объект класса Info. Таким образом у тебя получается система, которая состоит из объектов, которые взаимодействуют друг с другом посредством передаваемых сообщений. Секретарь может брать портфель и переносить его. Секретарь может брать портфель и класть в него что-то. Секретарь может брать портфель и доставать из него что-то. Пирожок он может съесть. Данные объекта класса Info он может переписать в ведомость. При этом объект строка из объекта класса Info копируется в объект строку в объекте класса Ведомости.

Понимаешь, это работает вот так. Для этого классы и создаются. Они не просто для умности какой-то пишутся.


tags: oop



Отредактировано py.user.next (Дек. 24, 2023 00:58:21)

Офлайн

#3 Дек. 23, 2023 15:55:25

xam1816
Зарегистрирован: 2020-05-11
Сообщения: 1310
Репутация: +  113  -
Профиль   Отправить e-mail  

Работа с классами

  
class MyClass:
    def __init__(self):
        self._some_dict = {}
        self._some_list = []
 
    def set_some_dict(self, value):
        if isinstance(value, dict):
            self._some_dict = value
            print('значение установлено')
        else:
            print('значение должно быть словарем')
 
    def get_some_dict(self):
        return self._some_dict
 
if __name__ == '__main__':
    my = MyClass()
    my.set_some_dict({1: 'строка'})
    current_value = my.get_some_dict()
    print(f'текущее значение {current_value}')

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version