gpt4 book ai didi

python - python有转换运算符吗?

转载 作者:太空狗 更新时间:2023-10-29 21:17:05 28 4
gpt4 key购买 nike

我不这么认为,但我想我会问以防万一。例如,用于封装 int 的类:

i = IntContainer(3)
i + 5

我不仅对这个 int 示例感兴趣,我还在寻找一些干净和通用的东西,而不是覆盖每个 int 和 string 方法。

谢谢孙强。这正是我想要的。我没有意识到您可以子类化这些不可变类型(来自 C++)。

class IntContainer(int):
def __init__(self,i):
#do stuff here
self.f = 4

def MultiplyBy4(self):
#some member function
self *= self.f
return self

print 3+IntContainer(3).MultiplyBy4()

最佳答案

这应该可以满足您的需要:

class IntContainer(object):
def __init__(self, x):
self.x = x

def __add__(self, other):
# do some type checking on other
return self.x + other

def __radd__(self, other):
# do some type checking on other
return self.x + other

输出:

In [6]: IntContainer(3) + 6
Out[6]: 9

In [7]: 6 + IntContainer(3)
Out[7]: 9

有关更多信息,请在以下文档中搜索“radd”:

您会发现“右加法”、“右减法”等其他此类方法。

这是涵盖相同运算符的另一个链接:

顺便说一下,Python 确实有转换运算符:

但是,它们不会完成您在示例中需要的功能(主要是因为方法没有任何参数类型注释,因此没有隐式转换的好方法)。所以你可以这样做:

class IntContainer2(object):
def __init__(self, x):
self.x = x

def __int__(self):
return self.x


ic = IntContainer2(3)
print int(ic) + 6
print 6 + int(ic)

但这会失败:

print ic + 6  # error: no implicit coercion

关于python - python有转换运算符吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1117149/

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