对不起的头衔感到抱歉,不知道该放什么。
在python中创建类时,我使用它,
class NewClass(object):
def __init__(self,name):
self.name = name
但为什么它与此有所不同?
class NewClass(object):
def __init__(self,name):
name = self.name
当然,等号意味着它是同一个过程吗?为什么不同?
答案 0 :(得分:4)
=
是assignment statement,您似乎将此与==
equality comparison operator混淆。
陈述完全不同:
self.name = name
将局部变量name
引用的值分配给name
引用的对象上的属性self
。它从传递给初始化方法的值中设置新创建的实例的属性。
替代声明
name = self.name
将self上找到的属性name
的值分配给局部变量name
。它重新绑定本地名称(用新值替换旧值)。一旦方法结束,效果就消失了。由于AttributeError
上的name
属性在该时间点不存在,您可能会获得self
。
如果使用==
,则通常是,name == self.name
相当于self.name == name
。但是,对象可以通过为__eq__
method定义新实现来覆盖测试相等性的方式,这样两个表达式可以理论上产生不同的结果。
答案 1 :(得分:0)
class NewClass(object):
def __init__(self,name):
self.name = name
这会将实例变量self.name
分配给提供给__init__()
的参数值(在本例中为name
)
class NewClass(object):
def __init__(self,name):
name = self.name
这会将实例变量self.name
分配给参数name
的值。如果self.name
函数之前没有为其他内容分配__init__()
,则会产生错误。