gpt4 book ai didi

Python 输入 : Describe common properties

转载 作者:行者123 更新时间:2023-12-03 18:44:29 24 4
gpt4 key购买 nike

我有一些自动生成的代码,它们定义了许多具有公共(public)属性的类,例如不幸的是,它们没有基类、接口(interface)等。

class A:
errors = []

class B
errors = []

我如何描述它的类型?我无法轻易更改所有这些类型。

def validate(obj: ???):
if errors:
raise Exception("something wrong")

最佳答案

您需要定义一个协议(protocol),通过 typing.Protocol 完成Python 3.8 或更高版本(早期版本可以在 Protocol 模块中找到 typing_extensions。)

from typing import Protocol


class HasErrors(Protocol):
errors: list


# Requires an object whose type supports the HasErrors
# protocol, namely one with a list-valued class attribute
# named "errors"
def validate(obj: HasErrors):
if obj.errors:
raise Exception("something wrong")


class GoodClass:
errors: List[Any] = []

class BadClass1:
pass

class BadClass2:
errors: int = 3

validate(GoodClass()) # will pass
validate(BadClass1()) # will not pass; no errors attribute
validate(BadClass2()) # will not pass; errors attribute has wrong type

关于Python 输入 : Describe common properties,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60721926/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com