Python 实例变量未更改
赋值后,实例变量“x”未按预期更改 这是我的代码:Python 实例变量未更改,python,class,Python,Class,赋值后,实例变量“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) 但是我
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
125
-945
实例化Foo时会调用
\uuuu init\uuu
方法,如@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))
您可以通过以下方式获得所需的结果:
p = Foo()
print(p.x)
p = Foo(125)
print(p.x)
p = Foo(-945)
print(p.x)
\uuuu init\uuuu
仅在安装类时调用;e、 g.Foo(125)
如果希望在任何时候修改
self.x
时调用此代码,应使用:
正如你所期待的那样
还要注意如何消除前导数字的改进方法:self.\u x%=100
class Foo:
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)
定义初始化(self,x):
self.x=x
如果self.x>=100:
self.x=int(str(self.x)[-2:]
elif self.x实例化Foo
时,将调用\uuuu init\uuuu
方法。它不会在每次更新x
属性时调用。如果需要一个特殊的setter来修改属性分配,请使用。也许可以为此代码添加一些上下文,以便找到它的其他人能够理解发生了什么。StackOverflows指南说“简洁是可以接受的,但更全面的解释更好。”
p = Foo()
print(p.x)
p = Foo(125)
print(p.x)
p = Foo(-945)
print(p.x)
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)
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)