Python 实例变量未更改

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) 但是我

赋值后,实例变量“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)