jec*_*afa 7 python class instance python-3.x
这是一个非常简单的代码,用于演示我遇到的问题.这里发生的是我正在创建同一个类的两个不同实例,但更改一个属性会改变另一个实例的相应属性.我不确定为什么会这样.这在Python中是正常的还是我遇到了一些完全混乱的东西?
class exampleClass(object):
attribute1=0
attribute2="string"
x=exampleClass
x.attribute1=20
x.attribute2="Foo"
y=exampleClass
y.attribute1=60
y.attribute2="Bar"
print("X attributes: \n")
print(x.attribute1)
print(x.attribute2)
print("Y attributes: \n")
print(y.attribute1)
print(y.attribute2)
Run Code Online (Sandbox Code Playgroud)
这是程序从我的控制台出来的样子:
>>>
X attributes:
60
Bar
Y attributes:
60
Bar
>>>
Run Code Online (Sandbox Code Playgroud)
我认为应该说:
X attributes:
20
Foo
Y attributes:
60
Bar
Run Code Online (Sandbox Code Playgroud)
我究竟做错了什么?
当您需要实例属性时,您正在创建类属性.用这个:
class exampleClass(object):
def __init__(self):
self.attribute1 = 0
self.attribute2 = "string"
Run Code Online (Sandbox Code Playgroud)
此外,您没有创建exampleClass的任何实例,您需要这样:
x = exampleClass()
y = exampleClass()
Run Code Online (Sandbox Code Playgroud)
您的代码只是为类使用新名称,并更改其属性.
您已经创建了属性类属性.这意味着它们的范围限于类本身,而不是类的对象.
如果你想要对象范围,你可以做类似的事情:
class exampleClass(object):
def __init__(self):
self.attribute1=0
self.attribute2="string"
x = exampleClass()
y = exampleClass()
Run Code Online (Sandbox Code Playgroud)
然后,当您更改对象的属性值时,它仅影响该特定的值,而不是该类的所有对象.
| 归档时间: |
|
| 查看次数: |
5722 次 |
| 最近记录: |