如何使用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
类定义的位置。
答案 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')