Python-如何自动编辑类对象值?

Python-如何自动编辑类对象值?,python,python-3.x,Python,Python 3.x,如何在指定类对象时使用一些规则更改该类对象? 例如: class Foo: x=0 if x < 0: x = -1 else: x = 1 p = Foo() p.x = 1234 print(p.X) Foo类: x=0 如果x

如何在指定类对象时使用一些规则更改该类对象? 例如:

class Foo:
    x=0
    if x < 0:
        x = -1
    else:
        x = 1


p = Foo()
p.x = 1234
print(p.X)
Foo类:
x=0
如果x<0:
x=-1
其他:
x=1
p=Foo()
p、 x=1234
印刷品(p.X)

所以当我打印p.x时,我希望打印1。但1234是印刷品。我该怎么办?

您声明的第一个
x=0
是类属性。对于类的所有对象都是相同的

编写
p.x
时,创建一个实例属性,即属于该特定对象的
x
。这会在特定对象中隐藏
Foo.x
(python属性查找就是这样工作的)

但是,该值仍然是该类其他对象的默认值,例如,如果创建新对象

foo2 = Foo()
print(f2.x) # prints 1

您必须使用setter函数使
x
a:

class Foo:
    def __init__(self):
        self.x = 1

    @property
    def x(self):
        return self._x

    @x.setter
    def x(self, value):
        if value < 0:
            value = -1
        else:
            value = 1

        self._x = value

欢迎来到stackoverflow!!这可能有助于您使用
self.x
而不是
x
您想设置class属性
Foo.x
还是对象属性
p.x
?我知道了。谢谢:)您应该在
Foo中初始化
self.x
。\uuuuu init\uuuu
否则在设置前尝试读取
x
会引发属性错误。
>>> foo = Foo()
>>> foo.x = 1234
>>> foo.x
1