- Член од
- 16 јуни 2022
- Мислења
- 11
- Поени од реакции
- 0
Се прашувам дали можеме да го користиме пакетот за пишување за да дефинираме „интерфејс“, односно класа/објект во Python 3.
Се чини дека најчестата техника за изградба на „интерфејс“ во Python е да се користи апстрактна класа изградена со користење на ABC како аргумент за тип. Меѓутоа, бидејќи Python е динамички напишан, целосно апстрактен тип не е ништо повеќе од навестување за пишување Python. Јас би очекувал споменатиот интерфејс да нема ефект за време на извршувањето. Основната класа може да содржи наследени методи, што не е она што го сакам.
Голем дел од ова се заснова на моето искуство со TypeScript, кое ни овозможува брзо да декларираме типови на објекти користејќи интерфејс или клучниот збор за тип, но тие се користат само од проверувачот на типови.
Дозволете ми да го илустрирам мојот случај на употреба со пример:
Да претпоставиме дека дефинирам функција foo на следниов начин:
Како резултат на тоа, foo е метод кој очекува да прими примерок од објект кој мора да содржи oogle функција која прифаќа листа на броеви. Сакам повикувачите да разберат дека тоа е она што foo го очекува од барот, но барот може да биде од секаков тип.
Се чини дека најчестата техника за изградба на „интерфејс“ во Python е да се користи апстрактна класа изградена со користење на ABC како аргумент за тип. Меѓутоа, бидејќи Python е динамички напишан, целосно апстрактен тип не е ништо повеќе од навестување за пишување Python. Јас би очекувал споменатиот интерфејс да нема ефект за време на извршувањето. Основната класа може да содржи наследени методи, што не е она што го сакам.
Голем дел од ова се заснова на моето искуство со TypeScript, кое ни овозможува брзо да декларираме типови на објекти користејќи интерфејс или клучниот збор за тип, но тие се користат само од проверувачот на типови.
Дозволете ми да го илустрирам мојот случај на употреба со пример:
Да претпоставиме дека дефинирам функција foo на следниов начин:
Код:
def foo(bar):
nums = [i for i in range(10)]
result = bar.oogle(nums)
return result