__init__函数中的“ del self.self”是什么意思?

时间:2019-08-05 22:16:43

标签: python

我以这种方式看到某人的代码:

class SomeClass(ParentClass):
    def __init__(
        self,
        attribute_1,
        attribute_2
    ):
        self.__dict__.update(locals())
        del self.self

我可以理解第一行-将新属性添加到ParentClass'属性字典中。但是del self.self是什么?

我试图查看self.self是什么。 正是那自我。为什么要在其__init__函数中删除该对象?当我退出__init__时,发现该对象仍然存在,并且具有相同的地址。

self
Out[2]: <classname at 0x244ee3f6a90>
self.self
Out[3]: <classname at 0x244ee3f6a90>
self.self.self
Out[4]: <classname at 0x244ee3f6a90>

2 个答案:

答案 0 :(得分:10)

行:self.__dict__.update(locals())导致三个名称被绑定为self的属性:selfattribute_1attribute_2del self.self只是删除名称为self的对象上不需要的self属性。

这很懒。最好只包含两行:

self.attribute_1 = attribute_1
self.attribute_2 = attribute_2

答案 1 :(得分:6)

def FindLabel ( [SITE], [SITE_NAME] ): return [SITE]+"-"+[SITE_NAME] 是局部变量,因此它出现在self中。

locals()为每个本地变量(包括self.__dict__.update(locals()))向新对象添加属性。由于显然不需要该属性,因此将其删除。