pgamesorg, вам Antonio Solo хорошо пояснил.
Но по существу происходит там то, что вы написали. Просто полиморфизм позволяет пользоваться объектом не зная его внутренней структуры.
Представьте, что вы программируете очень крутого робота гиноида.
Она будет настолько крута, что сможет помимо всего прочего писать вам записки от руки красивым почерком.
Вот вы её учите пользоваться карандашом (различать, его, брать в руку, писать), потом ручкой... Вы можете научить робота пользоваться АбстрактнымПишущимСредством, различать его, брать в руку, писать. Когда роботу предложат стилус и планшет, она сможет написать вам записку благодаря полиморфизму. При этом у объектов остаются свои особенности. Стилус пишет только на планшете, карандаш не пишет на полиэтилене и коже человека, ручка так себе пишет на коже, но хуже пишет и не на всяком полиэтилене, а фломастер везде пишет нормально.
Разрабатывая робота вы могли бы и не знать, что появится в продаже световой микро-меч для письма по камню. Но там уже другая история с активацией. Да и обычная автоматическая ручка тоже требует включения. В реальной жизни интерфейсы сложнее простых примеров
pgamesorg, ты - это не тот ты, который всё знает. А тот ты, который наперёд не знает.
Ну в смысле ты пишешь код для других программистов. Не знаешь зачем им понадобится твой код и как они его будут использовать и расширять. Но примерно предполагаешь.
pgamesorg, не знаем - это было в смысле с точки зрения стороннего кода.
Идея в том, что ваша программа, например графический редактор, умеет рисовать на холсте разные фигуры. Изначально это круг и квадрат в комплекте.
Но редактор позволяет делать плагины. Объявлен абстрактный класс, который фактически описывает интерфейс.
Вы реализовали новый плагин, который добавляет новую фигуру - треугольник. Редактор изначально не знал как рисовать треугольник. Он просто вызывает метод "нарисовать" который описан в абстрактном классе и не знает что там будет выполняться в вашем классе треугольника. Это и есть полиморфизм.
Такими же полиморфными могут быть методы сохранения (сериализации или маршаллинга), десериализации. Благодаря всему этому вы можете расширять ваш редактор добавляя туда плагинами новую функциональность.
Питон - интерпретируемый язык. В нём есть так называемая "утиная типизация", когда вызывая какой-то метод ты не знаешь наверняка есть ли он у объекта. Если нет такого метода, то будет ошибка не в компиляции, а в рантайме. Это позволяет работать с объектом "как с уткой" независимо от того является ли он потомкам утки, может быть он потомок гуся или робо-цыпа.
Но абстрактные классы позволяют описать интерфейс явно, позволяют вынести общий код. Например код перемещения объекта будет одинаковый у круга и квадрата, его можно описать в абстрактном классе. А метод рисования разный и у каждого потомка он свой.
Итого. Когда вы пишете свой редактор вы и знать не знаете какие объекты добавит в палитру пользователь плагинами. Вы знаете лишь (дали понять это в описании интерфейса через абстрактный класс-предок), что у нового объекта будут методы нарисовать, сохранить, загрузить. Ну условно. С десериализацией там всё чуточку интереснее.
Afafks123132132165, что криво, что всё равно? Тут экстрасенсов не водится.
Что за ленивые пошли люди, а...
Посмотрите, может ширину с высотой перепутали?
Вы плохо сформулировали вопрос. Из него ничего не ясно. не ясно какие у вас проблемы и как устроена ваша игра, где и как хранятся данные пользователей.
Ilia Malashko, то, что вы закоммитили вы уже не потеряете. Пулл подмешает к текущему состоянию состояние сервера. Если будут конфликты, то вы увидите интерфейс устранения коллизий для ручного разруливания.
GET-запрос должен быть идемпотентным, то есть не должен менять состояние сервера. А вы, как я понял, хотите по факту get-запроса увеличивать счетчик проголосовавших.
В чем проблема штатно использовать POST запрос для этого?
Алексей selftrips.ru, для себя тем более.
Мало того, что get каждый дёрнуть может просто так на всякий случай, так ещё и он закеширован без спросу агрессивно может быть. Прокси, браузеры... на любом этапе такой запрос может либо сработать непроизвольно, либо не сработать, когда это явно было инициировано. Учесть все нюансы будет сложнее, чем сделать правильно.
Владислав, само собой придумали. Регекспы отлично годятся, если нужно что-то накостылять и сделать быстро, но если есть штатные средства, то следует пользоваться ими. Скажем, единоразово переработать гору ссылок - это регексп быстрее, а если встроить поддержку урлов разного вида в развесистый продукт, то регекспами поддерживать соответствуюший RFC устанете и всё равно огребете сюрпризов.
Но по существу происходит там то, что вы написали. Просто полиморфизм позволяет пользоваться объектом не зная его внутренней структуры.
Представьте, что вы программируете очень крутого робота гиноида.
Она будет настолько крута, что сможет помимо всего прочего писать вам записки от руки красивым почерком.
Вот вы её учите пользоваться карандашом (различать, его, брать в руку, писать), потом ручкой... Вы можете научить робота пользоваться АбстрактнымПишущимСредством, различать его, брать в руку, писать. Когда роботу предложат стилус и планшет, она сможет написать вам записку благодаря полиморфизму. При этом у объектов остаются свои особенности. Стилус пишет только на планшете, карандаш не пишет на полиэтилене и коже человека, ручка так себе пишет на коже, но хуже пишет и не на всяком полиэтилене, а фломастер везде пишет нормально.
Разрабатывая робота вы могли бы и не знать, что появится в продаже световой микро-меч для письма по камню. Но там уже другая история с активацией. Да и обычная автоматическая ручка тоже требует включения. В реальной жизни интерфейсы сложнее простых примеров