猿问

是否有内置方法可以从Python中的所有基类获取所有__annotations__?

我们有内置dir()函数来获取在基类中定义的类或实例可用的所有属性。


注释也一样吗?我想要get_annotations()一个功能,其工作原理如下:


def get_annotations(cls: type): ...  # ?



class Base1:

    foo: float



class Base2:

    bar: int



class A(Base1, Base2):

    baz: str



assert get_annotations(A) == {'foo': float, 'bar': int, 'baz': str}


温温酱
浏览 108回答 1
1回答

陪伴而非守候

这应该可以解决问题,对吧?def get_annotations(cls: type):    all_ann = [c.__annotations__ for c in cls.mro()[:-1]]    all_ann_dict = dict()    for aa in all_ann[::-1]:        all_ann_dict.update(**aa) return all_ann_dictget_annotations(A)# {'bar': int, 'foo': float, 'baz': str}或者它的单行版本:get_annotations = lambda cls: {k:v for c in A.mro()[:-1][::-1] for k,v in c.__annotations__.items()}get_annotations(A)# {'bar': int, 'foo': float, 'baz': str}
随时随地看视频慕课网APP

相关分类

Python
我要回答