实例变量不变

时间:2019-02-12 09:17:24

标签: 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)

预期:

0
25
-1

但是我得到了:

0
125
-945

3 个答案:

答案 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)