Сделать атрибут класса частным вне API для пользователей, но общедоступным внутри API для разработчиков.Python

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Сделать атрибут класса частным вне API для пользователей, но общедоступным внутри API для разработчиков.

Сообщение Anonymous »

У меня возникли проблемы с классами, в которых у меня есть классы, к атрибутам и методам которых я хочу получить доступ в моем коде API, но эти атрибуты и методы не доступны пользователю, использующему API.
Рассмотрим этот пример кода:

Код: Выделить всё

class Context:
pass

class Foo(Generic[T]):
_context: Context

class Bar(Generic[T]):
_context: Context

def func_1(foo: Foo[str]) -> int:
# do something with _context

return NotImplemented

def func_2(foo: Foo[int], bar: Bar[int]) -> Bar[str]:
# do something with _context

return NotImplemented
Эти две функции подобны операторам, которые действуют на эти объекты, и нет смысла использовать их в качестве методов Foo и Bar в моем приложении. . Кроме того, они действуют только на определенные типы классов Foo и Bar. Если я получу доступ к foo._context, например, внутри func_1, mypy и pylance будут кричать на меня из-за доступа к частному атрибуту. Но я не хочу обнародовать это, так как не хочу, чтобы пользователи API имели доступ к этой функции. Как мне преодолеть это, сохраняя при этом соответствие моего кода стандартам типизации?
Я понимаю, что простым способом было бы просто получить доступ к foo._context внутри функций и включить набираю игнорировать комментарий. Однако мне это не кажется чистым, и мне было интересно, есть ли способ сделать это на Pythonic. Аналогично этому вопросу, мне было интересно, есть ли способ запретить пользователям API создавать экземпляры открытого класса, но при этом каким-то образом создавать экземпляры внутри API. Я имею в виду, что эти атрибуты и методы класса должны быть общедоступными внутри пакета для разработчиков, но не для пользователей библиотеки.

Подробнее здесь: https://stackoverflow.com/questions/790 ... api-for-de
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Python»