具有可写属性的类型的 Python 注释

标签 python annotations python-typing

我有一个函数,可以将名为 .addr 的属性粘贴到对象上,如下所示(简化版):

def add_addr(x: Any, stuff):
    object.__setattr__(x, 'addr', make_addr_from(stuff))

(是的,这甚至会修改不可变的对象。)

这意味着x 不能是基本类型,例如intstr。因此,Any 不是 x 的合适类型注释。 x 合适的类型注释是什么?

最佳答案

它也适用于基本类型,但您必须创建派生类,因为内置类的属性集有限。这也适用于列表、元组和字典等结构化类型。

class MyInt (int):
    pass

i = MyInt(42)
add_addr(i, whatever)

就注释而言,我认为创建一个抽象类作为允许使用 add_addr 设置属性的对象的基础并使用该基类是有意义的用于注释。

出于类型注释的目的,恐怕没有其他方法可以区分内置类和派生类。

或者,保留 Any 注释,并在函数内部使用 try... except AttributeError 子句。

关于具有可写属性的类型的 Python 注释,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67199916/

相关文章:

python - 有没有办法将新列添加到 Pandas 数据框,将新列的每个唯一值附加到数据框的每个现有行?

python - 即使退出状态非零,也使用 check_output 获取输出

hibernate @SequenceGenerator 不是全局的

ios - MapKit Direction to Selected 注释

python - 如何注释一个函数产生一个数据类?

模块类型的 Python 类型

python - 在 Django 模型表单中使用模型属性

python - Django Memcache session 异常行为

java - 使用 String.format() 作为注释属性值

python - Python 3.7中使用工厂函数生成注释类型时出现 “typing.ClassVar”问题