为AWS Boto3类型定义显式返回值

时间:2017-01-30 15:20:53

标签: python amazon-web-services types boto3

如何使用object的正确返回类型替换boto3.resources.factory.ec2.Instance?这是出于智能感知的目的。

# Note: self._resource -> boto3.resource(...)

def instance(self, instance_id: str) -> object:
    """
    Gets EC2 instance based on Instance ID.
    :param instance_id: AWS EC2 Instance ID
    """
    instance = self._resource.Instance(instance_id)
    return instance

根据type(ec2.instance('i-123456'))(此示例中的ec2是包含instance()方法的类的实例),它返回<class 'boto3.resources.factory.ec2.Instance'>。但是,boto3使用工厂模式返回Instance类的实例;它隐藏了Instance类定义的位置。

1 个答案:

答案 0 :(得分:1)

You specify an rtype in your docstring when you want to specify the return type。大多数IDE都足够聪明,可以接受它。


    def instance(self, instance_id: str):
        """
        Gets EC2 instance based on Instance ID.
        :param instance_id: AWS EC2 Instance ID
        :rtype: boto3.resources.factory.ec2.Instance
        """
        instance = self._resource.Instance(instance_id)
        return instance

如果你想使用python类型提示,因为你想确保一些额外的安全性,你可能想要使用TypeVar:

from typing import TypeVar
T = TypeVar('T', bound='boto3.resources.factory.ec2.Instance')