Во-первых (IMO) не слушают людей, которые говорят friend
, не полезно. Это полезно. Во многих ситуациях у Вас будут объекты с данными или функциональностью, которые не предназначаются, чтобы быть общедоступными. Это особенно верно для больших кодовых баз со многими авторами, которые могут только быть поверхностно знакомы с различными областями.
СУЩЕСТВУЮТ альтернативы другу спецификатор, но часто они являются громоздкими (классы бетона cpp-уровня / определения типов маскированные) или не надежными (комментарии или соглашения имени функции).
На ответ;
friend
спецификатор предоставляет обозначенный доступ класса к защищенным данным или функциональности в классе, делающем друга оператор. Например, в ниже кода любой может попросить у ребенка их имени, но только родительский элемент и ребенок могут изменить имя.
можно взять этот простой пример далее путем рассмотрения более сложного класса, такого как Окно. Довольно вероятно, Окно будет иметь многих функцией/элементами данных, которая не должна быть публично доступна, но необходима связанному классу, такому как WindowManager.
class Child
{
//Mother class members can access the private parts of class Child.
friend class Mother;
public:
string name( void );
protected:
void setName( string newName );
};
os.startfile пока доступен только для Windows, но xdg-open будет доступен на любом клиенте unix, на котором запущен X.
if sys.platform == 'linux2':
subprocess.call(["xdg-open", file])
else:
os.startfile(file)
в Windows, это работает с os.system ('start
. На Mac (я знаю, что вы не спрашивали ...) это os.system ('open
Откройте файл с помощью приложения, которое ваш браузер считает подходящим:
import webbrowser
webbrowser.open_new_tab(filename)
В меню «Проект» выберите «Изменить активный». Цель «[...]».
Затем в разделителе сборки убедитесь, что у вас выбрана вся конфигурация, и выполните следующие действия:
Это должно сработать, но в последнем есть еще одна хитрость. Вы можете добавить условие сборки в «Пути поиска библиотеки», чтобы компилятор использовал разные двоичные файлы для разных архитектур, то есть вы можете легко компилировать как для Симулятора, так и для устройства. Инструкция ниже.
Спросите у своего любимого Application Framework, как это сделать в Linux.
Это будет работать в Windos и Linux, пока вы используете GTK:
import gtk
gtk.show_uri(gtk.gdk.screen_get_default(), URI, 0)
где URI
- это локальный URL-адрес файла
Небольшая поправка необходима для того, чтобы решение NicDumZ работало точно так, как указано. Проблема заключается в использовании оператора is. Рабочее решение:
if sys.platform == 'linux2':
subprocess.call(["xdg-open", file])
else:
os.startfile(file)
Хорошее обсуждение этой темы находится на Есть ли разница между `==` и `is` в Python? .