我正在研究python中的一個類,我不知道我是否可以分配給它的一個方法內的對象。例如:Python對象本身內部的對象
class foo:
def __init__(self):
self = <something>
該分配(第3行)是正確的嗎?
我正在研究python中的一個類,我不知道我是否可以分配給它的一個方法內的對象。例如:Python對象本身內部的對象
class foo:
def __init__(self):
self = <something>
該分配(第3行)是正確的嗎?
self
是對對象的引用。如果賦值給它,則更改self所引用的變量對象,但不會修改該方法之外的任何內容。
的功能類似於下面的代碼:
def change(a):
a = 10
print(a) # prints 10
x = 5
change(x)
print(x) # prints 5
您可以指定名稱self
,但不會「分配給對象」。它不會對物體產生任何影響。它只是給一個名爲self
的局部變量賦值。
沒有,也不會「分配給對象」。基本上,你的代碼會做兩件事情:
創建一個變量self
是本地foo.__init__
:
>>> class foo:
... def __init__(self):
... self = 'hi'
... print(self)
...
>>> foo()
'hi'
>>>
之後,這是在類的初始化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'
>>>
答案是「是的,你可以」。但是,你爲什麼要這樣做? –
你認爲該做什麼? – murgatroid99
您可以分配名稱'self',但不會「分配給對象」。它不會對物體產生任何影響。 – BrenBarn