python - 为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
解决方案
使用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)
推荐阅读
- python - Tensorflow 给出错误 ImportError: DLL load failed with error code -1073741795
- android - Android Firefox 在后台不显示网络推送消息
- ajax - 如何使用 AJAX 在弹出窗口中显示 wpDataTables 结果
- javascript - 如何在当前视图中加载新视图?
- wpf - 我怎样才能在屏幕上获取所有价值?
- node.js - 从另一个包访问 package.json
- java - 如何从包中的类访问 src 中的类
- arrays - 如何在 Jmeter 的 JSON 请求中传递数组
- java - 在 MongoDB 整数数据类型中自动类型转换为 doube?
- python - 如何在python 3中组合表格