Сделайте функциональный краткий обзор, так, чтобы производные классы не имели никакого другого выбора, чем переопределить его.
@Ray Ваш код недопустим.
class parent {
public:
virtual void handle_event(int something) const = 0 {
// boring default code
}
};
Абстрактные функции не могут иметь тел, определенных встроенный. Это должно быть изменено для становления
class parent {
public:
virtual void handle_event(int something) const = 0;
};
void parent::handle_event( int something ) { /* do w/e you want here. */ }
Мне нравится Андрей Предложение Ваджны hasattr (var, '__ iter __')
. Обратите внимание на эти результаты для некоторых типичных типов Python:
>>> hasattr("abc","__iter__")
False
>>> hasattr((0,),"__iter__")
True
>>> hasattr({},"__iter__")
True
>>> hasattr(set(),"__iter__")
True
Это имеет дополнительное преимущество, заключающееся в обработке строки как не повторяемой - строки представляют собой серую область, так как иногда вы хотите рассматривать их как элемент, в других случаях как последовательность
Обратите внимание, что в Python 3 тип str
имеет атрибут __ iter __
, и это не работает:
] Я думаю, вы можете использовать пакет OSProcess, чтобы делать то, что хотите. Кроме того, думаю, лучше спросить в списках рассылки squeak-dev или pharo.
Поддержка Shell в Squeak / Pharo довольно ограничена. Есть планы улучшить это; см. проект Coral . Ваш вклад приветствуется.
У вас есть два решения:
Используйте пакет ProcessWrapper. Плюсы: быстрая и простая установка. Минусы: ограниченная функциональность, только на win32.
Используйте пакет OSProcess / CommandShell. Плюсы: довольно хорошая функциональность (каналы, переменные среды, рабочее пространство в виде оболочки ...) и кроссплатформенность. Минусы: необходимо использовать инструменты VMMaker для создания внешнего плагина.