首页 > 解决方案 > del on field from vars(instance) 从对象中删除属性

问题描述

我注意到一个非常奇怪的行为:

class Aclass:
    def __init__(self, time: int, contract: Contract, strategy: str = 'Strategy') -> None:
        self.time: int = time
        self.contract: Contract = contract
        self.strategy: str = strategy
    
    def to_dict(self) -> Dict:
        basic = vars(self)

        # I don't want this in the result 
        del basic['contract']

        return basic


if __name__ == '__main__':
    inst = Aclass(123, Contract())
    inst_dict = inst.to_dict()

    inst.contract # AttributeError: 'Aclass' object has no attribute 'contract' 


我收到上述书面属性错误...任何想法为什么会发生这种情况?

如果我使用vars(self).copy()一切正常。

标签: pythonpython-3.x

解决方案


vars(self)__dict__根据以下文档返回属性。返回的字典存储了对象实例的所有属性。因此,删除其中一个条目 viadel等同于删除对象实例的属性。

如果要在vars(self)不影响对象实例的情况下返回修改后的对象,则需要执行复制。


推荐阅读