python对自身内部对象的赋值
我正在用python编写一个类,我不知道是否可以在它的一个方法中为对象赋值。例如:python对自身内部对象的赋值,python,object,variable-assignment,self,Python,Object,Variable Assignment,Self,我正在用python编写一个类,我不知道是否可以在它的一个方法中为对象赋值。例如: class foo: def __init__(self): self = <something> foo类: 定义初始化(自): 自我= 分配(第3行)正确吗?您可以分配给名称self,但不能“分配给对象”。它不会对对象产生任何影响。它只是给一个名为self的局部变量赋值,您可以给名称self赋值,但这并不“赋值给对象”。它不会对对象产生任何影响。它只是给一个名为self
class foo:
def __init__(self):
self = <something>
foo类:
定义初始化(自):
自我=
分配(第3行)正确吗?您可以分配给名称
self
,但不能“分配给对象”。它不会对对象产生任何影响。它只是给一个名为self
的局部变量赋值,您可以给名称self
赋值,但这并不“赋值给对象”。它不会对对象产生任何影响。它只是给一个名为self
self
的局部变量赋值,它是对对象的引用。如果指定给它,则会更改变量self引用的对象,但它不会修改该方法之外的任何内容
该功能类似于以下代码:
def change(a):
a = 10
print(a) # prints 10
x = 5
change(x)
print(x) # prints 5
self
是对对象的引用。如果指定给它,则会更改变量self引用的对象,但它不会修改该方法之外的任何内容
该功能类似于以下代码:
def change(a):
a = 10
print(a) # prints 10
x = 5
change(x)
print(x) # prints 5
否,它不会“指定给对象”。基本上,您的代码将做两件事:
self
,该变量是foo的本地变量
>>> class foo:
... def __init__(self):
... self = 'hi'
... print(self)
...
>>> foo()
'hi'
>>>
foo
初始化时提供给foo.\uuuu init\uuuu
的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'
>>>
下面是一个演示:
>>> class foo:
... def __init__(self):
... self.my_attribute = 'value'
...
>>> test = foo()
>>> test.my_attribute
'value'
>>>
否,它不会“指定给对象”。基本上,您的代码将做两件事:
self
,该变量是foo的本地变量
>>> class foo:
... def __init__(self):
... self = 'hi'
... print(self)
...
>>> foo()
'hi'
>>>
foo
初始化时提供给foo.\uuuu init\uuuu
的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'
>>>
下面是一个演示:
>>> class foo:
... def __init__(self):
... self.my_attribute = 'value'
...
>>> test = foo()
>>> test.my_attribute
'value'
>>>
答案是“是的,你可以”。但是,您为什么要这样做?您希望该赋值做什么?您可以将其赋值给名称
self
,但这并不“赋值给对象”。它不会对对象产生任何影响。修改self(而不是初始化某些self的参数)的唯一合理位置是构造函数,在Python中,这不是\uuuuuu init\uuuuuu
方法,而是\uuu new\uuuu
方法。也许,这个答案值得一读。答案是“是的,你可以”。但是,您为什么要这样做?您希望该赋值做什么?您可以将其赋值给名称self
,但这并不“赋值给对象”。它不会对对象产生任何影响。修改self(而不是初始化某些self的参数)的唯一合理位置是构造函数,在Python中,这不是\uuuuuu init\uuuuuu
方法,而是\uuu new\uuuu
方法。也许,这个答案值得一读。