python 中数据类的最佳泛型类型提示是什么?

What is the best generic type hint for a dataclass in python?

我已经开始使用数据classes,我有一些具体的数据,例如:

from dataclasses import dataclass

@dataclass
class Person:
    name: str
    age: int
    job:str
    
@dataclass
class Animal:
    name: str
    age: int

然后我有一个像接口一样的抽象class

import abc
from typing import List, Dict


class NameFinder:
    @abc.abstractmethod
    def get_name(self, name: str,being ) :
        pass

class PersonName(NameFinder):
    def get_name(self, name:str, person:Person):
        return person.name

class AnimalName(NameFinder):
    def get_name(self, name:str, animal:Animal):
        return animal.name

我可以在摘要中使用什么好的通用类型提示 class 作为 Person 和 Animal classes 的占位符?

您可以定义一个协议 class,它只声明 name 属性的存在。

from typing import Protocol


class Named(Protocol):
    name: str


class NameFinder:
    @staticmethod
    def get_name(obj: Named) -> str:
        return obj.name

# or ...
def name_finder(obj: Named) -> str:
    return obj.name

get_namename_finder 都可以接受 PersonAnimal 类型的参数,因为 class 都定义了 name 属性对于他们的例子。没有必要将 classes 显式标记为实现 Named 协议。