在Python中,如何让自定义类型来描述更具体的类型提示?

In Python, how to make a custom type to describe a more specific type hints?

我是 运行 一个使用 openpyxl 的脚本,我有一些函数 copy_value 显示如下:

from openpyxl.workbook.workbook import Workbook

def copy_value(source: Workbook, target: Workbook, cell: str) -> None:
    do something...

现在我担心的是参数 cell 的类型提示只是一个通用的 str。我想要一个自定义的和更具体的类型,比如 Cell(也是 str),这样用户就会知道这个参数不仅会采用任何其他字符串,例如 'abc' 或 '123worksheet',但必须是有效的单元格,例如 'D12' 或 'AA345'.

或者如何正确地做到这一点?

如果你想通过类型提示进行验证,你可以做类似

的事情
class Cell(str):
    def __new__(cls, cell_identifier: str):
        if not cell_identifier.startswith('abc'):  # Add your string validation logic here
            raise ValueError('Cell identifier is not valid!')

        return str.__new__(cls, cell_identifier)

那么你的函数就像

def copy_value(source: Workbook, target: Workbook, cell: Cell) -> None:
    do something...

注意类型提示旨在检查变量的类型,而不是它们的运行时值。 类型提示不能确保传递给您的函数的参数来自提示类型,因此不能保证它们遵循您想要的字符串模式。 从原始类型继承不是很常见,通常也不需要。

如果验证很重要,则由您来验证数据。在调用函数和传递参数时,或者在你的函数中更好,比如

def copy_value(source: Workbook, target: Workbook, cell: str) -> None:
    if cell.startswith('abc'):  # Your validation logic here
            raise ValueError('Cell identifier is not valid!')
    do something...