Использование класса C++ в Python

ispolzovanie klassa c v python Интеграция Python/C

После того как связующий программный код будет сгенерирован и откомпилирован, сценарии Python смогут обращаться к классу C++, как если бы он был написан на Python. Фактически импортируемый теневой класс в модуле number.py, который выполняется поверх модуля расширения, является сгенерированным программным кодом Python. В примере 20.19 повторяются тесты классов из файла main.cxx. Однако здесь класс C++ используется из языка программирования Python — это может показаться удивительным, но со стороны Python программный код выглядит вполне естественным.

Пример 20.19. PP4E\Integrate\Extend\Swig\Shadow\main.py

пример использования класса C++ в Python (модуль c++ + теневой класс py) этот сценарий выполняет те же самые тесты, что и файл main.cxx C++

from number import

Number # импортировать теневой класс для модуля

C++

num = Number(1)

# создать объект класса C++ в Python

 

num.add(4)

# вызвать его методы из Python

 

num.display()

# num хранит указатель thisязыка C++

 

num.sub(2)

 

 

num.display()

 

 

res = num.square()

# преобразует возвращаемое из C++ значение

int

print(‘square: ‘,

res)

 

num.data = 99

# установить член data C++, сгенерированный _

setattr

val = num.data # получить член data C++, сгенерированный __getattr__ print(‘data: ‘, val) # вернет обычный объект Python целого числа print(‘data+1: ‘, val + 1)

num.display() print(num) # вызовет repr в теневом классе

del num # автоматически вызовет деструктор C++

Так как класс C++ и его обертки автоматически загружаются при импорте модуля number.py теневого класса, этот сценарий выполняется, как всякий другой:

/PP4E/Integrate/Extend/Swig/Shadow$ python main.py Number: 1 add 4 Number=5 sub 2 Number=3 square: 9 data: 99

data+1: 100

Number=99

<number.Number; proxy of <Swig Object of type ‘Number *’ at 0x7ff4bb48> > ~Number: 99

Этот вывод производится в основном методами класса C++ и в значительной степени совпадает с результатами работы программы main.cxx, представленной в примере 20.16 (кроме вывода информации об экземпляре — теперь это экземпляр теневого класса Python).

Использованная литература:

Марк Лутц — Программирование на Python, 4-е издание, II том, 2011

Каталог сайтов Всего.ру
Оцените статью
Секреты программирования
Добавить комментарий