Как инициализировать пустую переменную для клиента boto3Python

Программы на Python
Ответить
Anonymous
 Как инициализировать пустую переменную для клиента boto3

Сообщение Anonymous »

Я хотел бы выполнить простую проверку, пуста ли переменная для клиента boto3. Я попробовал следующий подход:

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

"""Example of boto3 client lazy initialization"""
from typing import Optional
import boto3
from botocore.client import BaseClient
from mypy_boto3_ec2 import EC2Client

class ClassA:
"""Abstract class which lazily initializes the boto3 client"""
def __init__(self) -> None:
self._client: Optional[BaseClient] = None
self.client_type: str = ""

@property
def client(self):
"""Lazy boto3 client initialization"""
if not self._client:
self._client = boto3.client(self.client_type)
return self._client

class ClassB(ClassA):
"""One of many concrete child classes of the ClassA"""
def __init__(self) -> None:
super().__init__()
self._client: Optional[EC2Client] = None
self.client_type: str = "ec2"

def some_method(self) -> dict:
"""Just a method to try random EC2Client functionality"""
result = self.client.describe_instances()
return result

Но в этом коде много проблем с типизацией (сводка проблем, обнаруженных mypy иpyright):
  • Я не могу переопределить родительский тип BaseClient конкретным классом EC2Client
  • Когда я оставляю необязательный для типа клиента, значение None не имеет значения совместим с типами BaseClient и EC2Client
  • Когда я оставляю клиент необязательным, NoneType не имеет атрибута define_instances.
  • Когда я оставляю ClassA._client нетипизированным и равным None, клиент дочернего класса снова становится клиентом несовместимо.
Итак, как мне ввести пустую переменную для клиента boto3? Каким должно быть значение, чтобы я мог признать, что переменная пуста? (Как сделать его необязательным без проблемы с атрибутом NoneType?)
Вопросы, которые я использовал в качестве источников:
  • Я пытаюсь ввести аннотацию для boto3, но у модуля botocore.client нет атрибута EC2.
  • Какова правильная аннотация типа для boto3.client(service)
    Переопределение подтипа переменной несовместимо


Подробнее здесь: https://stackoverflow.com/questions/793 ... to3-client
Ответить

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

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

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

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

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