Java выполняет раннее связывание для статических методов, в отличие от методов экземпляров, которые динамически связаны.
Поскольку ваша объектная переменная имеет тип Main, вызов привязан к реализации суперкласса во время компиляции.
Хорошее объяснение доступно здесь .
Необходимо взглянуть на Повышение. Python . Вот краткое введение, взятое от их веб-сайта:
Повышение Библиотека Python является платформой для взаимодействия через интерфейс с Python и C++. Это позволяет Вам быстро, и беспрепятственно представьте функции классов C++ и объекты к Python, и наоборот, не используя специальных инструментов - просто Ваш компилятор C++. Это разработано для обертывания интерфейсов C++ ненавязчиво, так, чтобы Вы не изменяли код C++ вообще для обертывания его, делая Повышение. Идеал Python для представления сторонних библиотек к Python. Использование библиотекой усовершенствованных методов метапрограммирования упрощает свой синтаксис для пользователей, так, чтобы обертывание кода взяло вид своего рода декларативного языка определения интерфейсов (IDL).
Один из официальных документов Python содержит детали о расширяющийся Python с помощью C/C++ . Даже без использования БОЛЬШОЙ ГЛОТОК , it’s довольно простой и работы отлично над Windows.
lambda e: e[:1].upper() + e[1:]
.
– dbkaplun
15 August 2012 в 15:05
Выезд пирекс или Cython. Они - подобные Python языки для взаимодействия через интерфейс между C/C++ и Python.
Самый быстрый способ сделать это использует БОЛЬШОЙ ГЛОТОК .
Пример от БОЛЬШОГО ГЛОТКА учебное руководство :
/* File : example.c */
int fact(int n) {
if (n <= 1) return 1;
else return n*fact(n-1);
}
Интерфейсный файл:
/* example.i */
%module example
%{
/* Put header files here or function declarations like below */
extern int fact(int n);
%}
extern int fact(int n);
Здание модуль Python на Unix:
swig -python example.i
gcc -fPIC -c example.c example_wrap.c -I/usr/local/include/python2.7
gcc -shared example.o example_wrap.o -o _example.so
Использование:
>>> import example
>>> example.fact(5)
120
Примечание, что у Вас должен быть python-dev. Также в некотором системном Python заголовочные файлы будут в/usr/include/python2.7 на основе способа, которым Вы установили его.
Из учебного руководства:
БОЛЬШОЙ ГЛОТОК является довольно полным компилятором C++ с поддержкой почти каждой функции языка. Это включает предварительную обработку, указатели, классы, наследование и даже шаблоны C++. БОЛЬШОЙ ГЛОТОК может также привыкнуть к структурам пакета и классам в прокси-классы на выходном языке — представление базовой функциональности очень естественным способом.
I’ve никогда не использовал его, но I’ve слышал хорошие вещи [приблизительно 111] ctypes. Если you’re, пытающиеся использовать это с C++, несомненно, уклонятся от искажения имени через extern "C"
. спасибо за комментарий, Florian BГ¶sch.
ctypes является частью стандартной библиотеки, и поэтому более стабилен и широко доступен, чем большой глоток , который всегда имел тенденцию давать мне проблемы .
С ctypes, необходимо удовлетворить любую зависимость времени компиляции от Python, и привязка будет работать над любым Python, который имеет ctypes, не только тот, против которого это было скомпилировано.
предположим у Вас есть простой класс C++ в качестве примера, с которым Вы хотите говорить в файле, названном foo.cpp:
#include <iostream>
class Foo{
public:
void bar(){
std::cout << "Hello" << std::endl;
}
};
, Так как ctypes может только говорить с функциями C, необходимо предоставить тем, которые объявляют их как экстерн "C"
extern "C" {
Foo* Foo_new(){ return new Foo(); }
void Foo_bar(Foo* foo){ foo->bar(); }
}
Затем, необходимо скомпилировать это в общую библиотеку
g++ -c -fPIC foo.cpp -o foo.o
g++ -shared -Wl,-soname,libfoo.so -o libfoo.so foo.o
, И наконец необходимо записать обертку Python (например, в fooWrapper.py)
from ctypes import cdll
lib = cdll.LoadLibrary('./libfoo.so')
class Foo(object):
def __init__(self):
self.obj = lib.Foo_new()
def bar(self):
lib.Foo_bar(self.obj)
, Как только у Вас есть это, можно назвать его как [1 114]
f = Foo()
f.bar() #and you will see "Hello" on the screen
aColumnIndex
the column at which the data can be found in the cursor
. Я использовал Cursor.getColumnIndex
для сравнения с.
– theblang
21 November 2013 в 22:28
Данная статья, утверждая Python быть всем ученый нуждается , в основном говорит: Первый прототип все в Python. Тогда, когда необходимо ускорить часть, используйте БОЛЬШОЙ ГЛОТОК и переведите эту часть в C.
Можно использовать Мост Языка Scapix для автоматической генерации привязки Python непосредственно от заголовков C++ как часть сборки.
Добавляют вызов к scapix_bridge_headers()
в Ваш файл CMakeLists.txt, затем разрабатывают Ваш проект с cmake -DSCAPIX_BRIDGE=python
. Посмотрите полный пример .
Правовая оговорка: я - автор Мост Языка Scapix .