python赋值给自身内部的一个对象

时间:2014-01-11 19:45:51

标签: python object variable-assignment self

我正在使用python中的一个类,我不知道是否可以在其中一个方法中分配一个对象。例如:

class foo:
    def __init__(self):
        self = <something>

该作业(第3行)是否正确?

3 个答案:

答案 0 :(得分:2)

您可以指定名称self,但不会“分配给对象”。它不会对对象产生任何影响。它只是为名为self的局部变量赋值。

答案 1 :(得分:2)

self是对象的引用。如果为其分配,则更改变量self引用的对象,但不会修改该方法之外的任何对象。

该功能类似于以下代码:

def change(a):
    a = 10
    print(a) # prints 10

x = 5
change(x)
print(x) # prints 5

答案 2 :(得分:2)

不,它不会“分配给对象”。基本上,您的代码将执行两项操作:

  1. 创建self的本地变量foo.__init__

    >>> class foo:
    ...     def __init__(self):
    ...         self = 'hi'
    ...         print(self)
    ...
    >>> foo()
    'hi'
    >>>
    
  2. 之后,在初始化类self时给foo.__init__的{​​{1}}参数将被覆盖。换句话说,在该行之后,您无法再为foo创建实例属性:

    foo
  3. 总之,你可以做你所描述的,但你真的不应该这样做。它对您的代码没有任何积极作用。相反,它很可能会在以后引起问题。即使它没有,它仍然会使阅读代码的人感到困惑。


    也许通过“分配给对象”,你的意思是你想为>>> class foo: ... def __init__(self): ... self = 'hi' ... print(self) ... self.attr = 'hello' ... >>> foo() hi Traceback (most recent call last): File "<stdin>", line 1, in <module> File "<stdin>", line 5, in __init__ AttributeError: 'str' object has no attribute 'attr' >>> 创建一个实例属性?如果是这样,那么语法将是这样的:

    foo

    以下是演示:

    class foo:
        def __init__(self):
            self.<attribute name> = <something>