Сделать атрибут класса частным вне API, но общедоступным внутри APIPython

Программы на 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 ... inside-api
Реклама
Ответить Пред. темаСлед. тема

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

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

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

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

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

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