为了账号安全,请及时绑定邮箱和手机立即绑定

您可以对内置类进行猴子修补吗?如果不能,我如何重载运算符来定义两个不同类的加法?

您可以对内置类进行猴子修补吗?如果不能,我如何重载运算符来定义两个不同类的加法?

慕莱坞森 2023-08-22 18:25:28
首先,这不是一个如何获得特定结果的问题,而是一个关于 Python 内部工作原理的问题。我对编程还很陌生,所以请告诉我是否使用了任何错误的术语。我的假设围绕着一个相当基本的错误。我尝试运行:"My age is " + 46显然,这会出现“无法将 'int' 对象隐式转换为 str”错误。没有将字符串添加到整数的定义,但我可以创建一个吗?我的第一个问题是这对于字符串和整数等内置类是否可行。我环顾四周,并不认为是这样,但如果有人知道一种方法,我会很感兴趣。我的第二个问题是,如果我定义两个新类,它们在各方面都表现得像字符串和整数,但不是内置的,我可以定义这两个类的加法吗?我知道我可以定义同一个类的添加,但是两个不同的类呢?最后,加法(无论是直接字符串和整数还是字符串和整数这样的两个类)应该通过在相加之前将整数转换为字符串来生成:“我的年龄是 46”。提前致谢!
查看完整描述

2 回答

?
偶然的你

TA贡献1841条经验 获得超3个赞

至于你的第一个问题:改变内置类基本上是不可能的。虽然你可能会干扰其他类,但这通常是一个糟糕的主意。相反,您可以创建一个具有所需属性的子类。


例如:


class mystr(str):

    def __add__(self, other):

       return mystr(str(self) + str(other))

此代码继承了该类的所有属性str,除了我们要更改的属性(即其添加行为)。通过强制转换self,str我们仍然委托 tostr的添加,但我们还将其他参数强制转换为str以获得您所描述的行为。


最后,我们返回到,mystr这样我们就不会得到str.


现在我们可以执行以下操作:


>>> some_string = mystr("abc")

>>> some_string + 4

"abc4"


查看完整回答
反对 回复 2023-08-22
?
隔江千里

TA贡献1906条经验 获得超10个赞

你可以这样做:


class stringclass:

    def __init__(self, mystring):

        stringclass.mystring = mystring

    def add(self, number):

        stringclass.mystring = stringclass.mystring + repr(number)

然后:


myobject = stringclass("My age is ")

“添加”号码:


myobject.add(46)

然后检查对象:


print(myobject.mystring)

这会给你:


My age is 46

(不过,我根本不知道这有什么用处。)


查看完整回答
反对 回复 2023-08-22
  • 2 回答
  • 0 关注
  • 146 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信