首先,这不是关于如何获得特定结果的问题,而是关于 Python 的内部工作原理的问题。我对编程很陌生,所以请告诉我是否错误地使用了任何术语。我的假设集中在一个非常基本的错误上。我尝试运行:
"My age is " + 46
显然,这给出了“无法将'int'对象隐式转换为str”错误。没有将字符串添加到整数的定义,但我可以创建一个吗?我的第一个问题是这对于字符串和整数等内置类是否可行。我环顾四周,不认为是这样,但如果有人知道我会感兴趣的方式。
我的第二个问题是,如果我定义了两个在各个方面都表现得像字符串和整数但不是内置的新类,我可以定义这两个类的加法吗?我知道我可以定义同一个类的添加,但是两个不同的呢?
最后,加法(无论是直接是字符串和整数还是像字符串和整数这样的两个类)应该通过在添加之前将整数转换为字符串来产生:“我的年龄是 46 岁”。
提前致谢!
最佳答案
至于你的第一个问题:改变内置类基本上是不可能的。尽管您可能会弄乱其他类,但这通常是一个糟糕的主意。相反,您可以创建一个具有所需属性的子类。
例如:
class mystr(str):
def __add__(self, other):
return mystr(str(self) + str(other))
此代码继承了 str
的所有属性。类,除了我们要更改的那个,即它的添加行为。通过类型转换 self
至str
我们仍然委托(delegate)给 str
的添加,但我们还将另一个参数转换为 str
得到你描述的行为。最后,我们回溯到
mystr
这样我们就不会得到 str
.现在我们可以执行以下操作:
>>> some_string = mystr("abc")
>>> some_string + 4
"abc4"
关于python - 你能在类中添加猴子补丁吗?如果没有,我如何重载一个运算符来为两个不同的类定义加法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64000818/