2014-01-11 73 views
1

我正在研究python中的一个类,我不知道我是否可以分配给它的一个方法内的对象。例如:Python对象本身内部的对象

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

该分配(第3行)是正确的吗?

+1

答案是“是的,你可以”。但是,你为什么要这样做? –

+2

你认为该做什么? – murgatroid99

+0

您可以分配名称'self',但不会“分配给对象”。它不会对物体产生任何影响。 – BrenBarn

回答

2

self是对对象的引用。如果赋值给它,则更改self所引用的变量对象,但不会修改该方法之外的任何内容。

的功能类似于下面的代码:

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

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

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

2

没有,也不会“分配给对象”。基本上,你的代码会做两件事情:

  1. 创建一个变量self是本地foo.__init__

    >>> class foo: 
    ...  def __init__(self): 
    ...   self = 'hi' 
    ...   print(self) 
    ... 
    >>> foo() 
    'hi' 
    >>> 
    
  2. 之后,这是在类的初始化foo将给予foo.__init__self参数被覆盖。换句话说,这条线之后,可以不再创建foo实例属性:

    >>> 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> 

下面是一个演示:

>>> class foo: 
...  def __init__(self): 
...   self.my_attribute = 'value' 
... 
>>> test = foo() 
>>> test.my_attribute 
'value' 
>>>