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

首先,这不是一个如何获得特定结果的问题,而是一个关于 Python 内部工作原理的问题。我对编程还很陌生,所以请告诉我是否使用了任何错误的术语。我的假设围绕着一个相当基本的错误。我尝试运行:


"My age is " + 46

显然,这会出现“无法将 'int' 对象隐式转换为 str”错误。没有将字符串添加到整数的定义,但我可以创建一个吗?


我的第一个问题是这对于字符串和整数等内置类是否可行。我环顾四周,并不认为是这样,但如果有人知道一种方法,我会很感兴趣。


我的第二个问题是,如果我定义两个新类,它们在各方面都表现得像字符串和整数,但不是内置的,我可以定义这两个类的加法吗?我知道我可以定义同一个类的添加,但是两个不同的类呢?


最后,加法(无论是直接字符串和整数还是字符串和整数这样的两个类)应该通过在相加之前将整数转换为字符串来生成:“我的年龄是 46”。


提前致谢!


慕莱坞森
浏览 147回答 2
2回答

偶然的你

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

隔江千里

你可以这样做: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(不过,我根本不知道这有什么用处。)
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python