【发布时间】:2015-10-31 09:56:14
【问题描述】:
在 Python 中,数据类型(如 int、float)既表示一个值,也有一些内置的属性/函数/等:
In [1]: a = 1.2
In [2]: a
Out[2]: 1.2
In [3]: a.is_integer()
Out[3]: False
是否可以在 Python 中重现此行为,例如定义一个类:
class Scalar:
def __init__(self, value)
self.value = value
# other code ....
s = Scalar(1.2)
我可以让s 返回 1.2(而不是输入s.value),然后执行a = s -> a = 1.2 之类的操作?我最接近这种行为的方法是添加如下内容:
def __getitem__(self, key=None):
return self.value
并使用a = s[()],但这看起来不太好。
【问题讨论】:
-
Python property callable 的可能重复项
-
特别是查看带有
WeirdInteger类的sn-p。 -
这不是一个通用的解决方案,但您可以通过简单地继承 float(或 int,或您想模仿的任何其他标量类型)使您的示例中的
Scalar类按照您想要的方式工作)。class Scalar(float): pass; s = Scalar(1.2) -
子类化一个类型可能有效,我必须看看它是否适用于我的(更复杂的..)问题,但我会试一试!