我正在研究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