gpt4 book ai didi

python - 更改 Python 对象的表示

转载 作者:太空宇宙 更新时间:2023-11-03 14:17:40 26 4
gpt4 key购买 nike

在 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[()],但这看起来不太好。

最佳答案

where I could have s return 1.2 (instead of typing s.value)

在控制台?然后实现__repr__方法。

a = s -> a = 1.2

为避免必须使用a = s.value,您可以实现__call__ 并调用对象:

>>> class Scalar:
... def __init__(self, value):
... self.value = value
... def __repr__(self):
... return str(self.value)
... def __call__(self):
... return self.value
...
>>> s = Scalar(1.2)
>>> s
1.2
>>> a = s()
>>> a
1.2

查看有关 data model on emulating numeric types 的文档.

例如:

class Scalar:
def __init__(self, value):
self.value = value
def __repr__(self):
return str(self.value)
def __call__(self):
return self.value
def __add__(self, other):
return Scalar(self.value + other.value)
def __lt__(self, other):
return self.value < other.value
def ___le__(self, other):
return self.value <= other.value
def __eq__(self, other):
return self.value == other.value
def __ne__(self, other):
return self.value != other.value
def __gt__(self, other):
return self.value > other.value
def __ge__(self, other):
return self.value >= other.value

可以这样使用:

>>> s1 = Scalar(1.2)
>>> s2 = Scalar(2.1)
>>> s1 + s2
3.3
>>> s1 < s2
True
>>> s1 > s2
False
>>> s1 != s2
True
>>> s1 <= s2
True
>>> s1 >= s2
False

还有__int____float__魔术方法,您可以像这样实现和使用(这在语义上更正确):

>>> a = int(s)
>>> a = float(s)

关于python - 更改 Python 对象的表示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31886464/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com