实例变量'x'分配后未按预期更改。
这是我的代码:
class Foo:
def __init__(self, x=0):
self.x = x
if self.x>=100:
self.x = int(str(self.x)[-2:])
elif self.x<0:
self.x = -1
p = Foo()
print(p.x)
p.x = 125
print(p.x)
p.x = -945
print(p.x)
预期:
0
25
-1
但是我得到了:
0
125
-945
答案 0 :(得分:0)
实例化Foo时,将调用__init__
方法,正如@khelwood所述,您可以添加如下方法:
class Foo:
def __init__(self, x=0):
self.x = x
def numVal(self, x=0):
if self.x>=100:
self.x = int(str(self.x)[-2:])
elif self.x<0:
self.x = -1
return self.x
p = Foo()
print(p.x)
p.x = 125
print(p.numVal(p.x))
p.x = -945
print(p.numVal(p.x))
输出:
0
25
-1
答案 1 :(得分:0)
您将通过以下方式获得所需的结果:
p = Foo()
print(p.x)
p = Foo(125)
print(p.x)
p = Foo(-945)
print(p.x)
__init__
仅在实例化类时调用;例如Foo(125)
。
如果您希望在修改self.x
时随时调用此代码,则应使用property
:
class Foo:
def __init__(self, x=0):
self.x = x
@property
def x(self):
return self._x
@x.setter
def x(self, value):
self._x = value
if self._x >= 100:
# self._x = int(str(self._x)[-2:])
self._x %= 100
elif self._x < 0:
self._x = -1
这样
p = Foo()
print(p.x)
p.x = 125
print(p.x)
p.x = -945
print(p.x)
按预期工作。
还注意到有关如何消除前导数字的改进方法:self._x %= 100
。
答案 2 :(得分:0)
class Foo:
def __init__(self, x):
self.x = x
if self.x>=100:
self.x = int(str(self.x)[-2:])
elif self.x<0:
self.x = -1
x=0
p = Foo(x)
print(p.x)
x=125
p = Foo(x)
print(p.x)
x=-945
p = Foo(x)
print(p.x)