Python创建类代码

时间:2016-10-24 08:42:35

标签: python class

对不起的头衔感到抱歉,不知道该放什么。

在python中创建类时,我使用它,

class NewClass(object):
    def __init__(self,name):
        self.name = name

但为什么它与此有所不同?

class NewClass(object):
    def __init__(self,name):
        name = self.name

当然,等号意味着它是同一个过程吗?为什么不同?

2 个答案:

答案 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__(),则会产生错误。