Страница 1 из 2 12 ПоследняяПоследняя
Показано с 1 по 10 из 12

Тема: Как Python extends dict в OOP проекте?

  1. Как Python extends dict в OOP проекте?

    Ребзя, нужна помощь с OOP в Python. Хочу уточнить, как правильно extends dict в моём проекте. У меня есть кастомный класс, где я пытаюсь наследоваться от встроенного словаря, чтобы добавить специфическую функциональность. Подскажите плиз, как лучше это реализовать и какие могут быть подводные камни? Какие есть тонкости в реализации и на что стоит обратить внимание? Всякие советы по коду и стилю тоже приветствуются.



  2. Ждём вас в нашем чате в Телеграмм ==>> @pythoneer_chat

    А ТАКЖЕ: Канал о Python, статьи и книги ==>>
    @pythoneer_ru

  3. Здорова! Если ты наследуешься от dict, то это довольно просто. Например:
    Программный код:
    class CustomDict(dict):
        
    def __init__(self, *args, **kwargs):
            
    super().__init__(*args, **kwargs)
        
        
    def add_item(selfkeyvalue):
            
    self[key] = value
      
    my_dict 
    CustomDict()
    my_dict.add_item('ключик''значение'
    Главное, не забывай звать супер класс в __init__. А ещё советую мало знать методов от dict'а, чтобы не ломать встроенную функциональность.

  4. Цитата Сообщение от Герда
    Здорова! Если ты наследуешься от dict, то это довольно просто. Например:
    Программный код:
    class CustomDict(dict):
        
    def __init__(self, *args, **kwargs):
            
    super().__init__(*args, **kwargs)
        
        
    def add_item(selfkeyvalue):
            
    self[key] = value
      
    my_dict 
    CustomDict()
    my_dict.add_item('ключик''значение'
    Главное, не забывай звать супер класс в __init__. А ещё советую мало знать методов от dict'а, чтобы не ломать встроенную функциональность.
    О, клёвый пример! Но что если я хочу добавить проверку для значений? Например, чтобы для определённого ключа тип значения был всегда строкой?

  5. Йоу! В общем, extends dict в Python не так уж и сложно. Просто наследуйся и добавляй свои методы. Но осторожно с __setitem__ и __getitem__, их можно случайно перелопатить и ломать всё к чертям

  6. Цитата Сообщение от Adrey64
    Йоу! В общем, extends dict в Python не так уж и сложно. Просто наследуйся и добавляй свои методы. Но осторожно с __setitem__ и __getitem__, их можно случайно перелопатить и ломать всё к чертям
    Ха, чётко подмечено про __setitem__! Я пару раз на этом обжигался. Но если всё делать аккуратно, то проблем не должно быть.

  7. Когда extends dict в Python, помни, что можешь столкнуться с некоторыми приколами. Особенно если работать с наследованием от встроенных классов. Используй super() и старайся, чтобы твои методы не пересекались с методами dict.

  8. Цитата Сообщение от GladiatorSoul
    Когда extends dict в Python, помни, что можешь столкнуться с некоторыми приколами. Особенно если работать с наследованием от встроенных классов. Используй super() и старайся, чтобы твои методы не пересекались с методами dict.
    Да, согласен полностью. Я ещё добавлю, что для сложных логик можно использовать collections.UserDict, он даёт больше гибкости.

  9. Примерно так это выглядит:
    Программный код:
    class CustomDict(dict):
        
    def __init__(self, *args, **kwargs):
            
    super().__init__(*args, **kwargs)

        
    def add_string_item(selfkeyvalue):
            if 
    not isinstance(valuestr):
                
    raise ValueError('Значение должно быть строкой')
            
    self[key] = value
      
    my_dict 
    CustomDict()
    my_dict.add_string_item('name''Alice')
    try:
        
    my_dict.add_string_item('age'30)
    except ValueError as e:
        print(
    e)  # Ожидается ошибка: Значение должно быть строкой 
    Важно правильно обрабатывать ошибки, и тогда твой код будет работать как нужно.

  10. Цитата Сообщение от Дубрава
    Примерно так это выглядит:
    Программный код:
    class CustomDict(dict):
        
    def __init__(self, *args, **kwargs):
            
    super().__init__(*args, **kwargs)

        
    def add_string_item(selfkeyvalue):
            if 
    not isinstance(valuestr):
                
    raise ValueError('Значение должно быть строкой')
            
    self[key] = value
      
    my_dict 
    CustomDict()
    my_dict.add_string_item('name''Alice')
    try:
        
    my_dict.add_string_item('age'30)
    except ValueError as e:
        print(
    e)  # Ожидается ошибка: Значение должно быть строкой 
    Важно правильно обрабатывать ошибки, и тогда твой код будет работать как нужно.
    Отличное решение! Теперь понятно, куда копать. Буду тестить с add_string_item.

Страница 1 из 2 12 ПоследняяПоследняя