简体   繁体   English

Python 类型提示

[英]Python Type Hints

in python 3.10 this code works, but from static code analysis I get error message from Pylance regarding "generalTypeIssue"在 python 3.10 中,此代码有效,但从 static 代码分析中,我从 Pylance 收到有关“generalTypeIssue”的错误消息

@dataclass
class Animal():
    name:str

class Dog(Animal):
    def bark(self):
        print("whoof")
class Snake(Animal):
    def bite(self):
        print("bite!!!")

def make_animal(animal_class: type[Animal], name: str) -> Animal:
    return animal_class(name=name)

my_dog = make_animal(animal_class=Dog, name="bello")
# type(my_dog) is <class '__main__.Dog'>
my_dog.bark() <--- cannot access member bark for Animal

How to make a func that returns instances with correct types based on the input type?如何制作一个函数,根据输入类型返回具有正确类型的实例?

Use a bound TypeVar to annotate the make_animal generic function使用绑定的TypeVar来注释make_animal泛型 function

from dataclasses import dataclass
from typing import TypeVar

@dataclass
class Animal:
    name: str

T = TypeVar('T', bound=Animal)

class Dog(Animal):
    def bark(self):
        print("whoof")

class Snake(Animal):
    def bite(self):
        print("bite!!!")

def make_animal(animal_class: type[T], name: str) -> T:
    return animal_class(name=name)

my_dog = make_animal(animal_class=Dog, name="bello")
# my_dog is correctly narrowed to Dog
my_dog.bark()

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM