我有一个函数,可以将名为 .addr
的属性粘贴到对象上,如下所示(简化版):
def add_addr(x: Any, stuff):
object.__setattr__(x, 'addr', make_addr_from(stuff))
(是的,这甚至会修改不可变的对象。)
这意味着x
不能是基本类型,例如int
或str
。因此,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/