我以这种方式看到某人的代码:
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>
答案 0 :(得分:10)
行:self.__dict__.update(locals())
导致三个名称被绑定为self
的属性:self
,attribute_1
,attribute_2
。 del 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())
)向新对象添加属性。由于显然不需要该属性,因此将其删除。