首页 > 解决方案 > 为python对象分配不同的值

问题描述

我想创建一个名为“Foo”的python类,它有一个名为“x”的属性,它是一个默认值为0的int。如果我为x分配一个积极的值,它会自动更改为10,如果我分配一个负数值会将其更改为-10。例如:

>>p = Foo()
>>print(p.x)
0
>>p.x = -45
>>print(p.x)
-10
>>p.x = 85
>>print(p.x)
10

标签: python

解决方案


使用property装饰器:

您首先_x在构造函数中定义为类成员:

    def __init__(self):
        self._x = 0

并用 初始化它0

然后你定义x为属性:

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

这意味着我们可以_x通过 name获取 的值x

x然后为with定义 setter @x.setter

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

x这将使用您定义的逻辑覆盖将 value 设置为 的原始逻辑。

注意:_x仍然可以访问,如果你改变它,上面定义的魔法将不成立(没有private类成员,如 C、C++、C#、Java 等其他语言中的类成员)。以传统方式开头的事物_意味着它们是内部使用的。

代码:

class Foo(object):
    def __init__(self):
        self._x = 0

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

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

p = Foo()
# 0
print(p.x)

p.x = -45
# -10
print(p.x)

p.x = 85
# 10
print(p.x)

推荐阅读