2014-01-11 70 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' 
>>>