python - 你能在类中添加猴子补丁吗?如果没有,我如何重载一个运算符来为两个不同的类定义加法?

标签 python overloading monkeypatching

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

"My age is " + 46
显然,这给出了“无法将'int'对象隐式转换为str”错误。没有将字符串添加到整数的定义,但我可以创建一个吗?
我的第一个问题是这对于字符串和整数等内置类是否可行。我环顾四周,不认为是这样,但如果有人知道我会感兴趣的方式。
我的第二个问题是,如果我定义了两个在各个方面都表现得像字符串和整数但不是内置的新类,我可以定义这两个类的加法吗?我知道我可以定义同一个类的添加,但是两个不同的呢?
最后,加法(无论是直接是字符串和整数还是像字符串和整数这样的两个类)应该通过在添加之前将整数转换为字符串来产生:“我的年龄是 46 岁”。
提前致谢!

最佳答案

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

class mystr(str):
    def __add__(self, other):
       return mystr(str(self) + str(other))
此代码继承了 str 的所有属性。类,除了我们要更改的那个,即它的添加行为。通过类型转换 selfstr我们仍然委托(delegate)给 str的添加,但我们还将另一个参数转换为 str得到你描述的行为。
最后,我们回溯到 mystr这样我们就不会得到 str .
现在我们可以执行以下操作:
>>> some_string = mystr("abc")
>>> some_string + 4
"abc4"

关于python - 你能在类中添加猴子补丁吗?如果没有,我如何重载一个运算符来为两个不同的类定义加法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64000818/

相关文章:

python - xlsxwriter 和 pandas 用于报告

python - 如何使用 QFileSystemWatcher 只发出一个directoryChanged 信号

c++ - VS2010 : templates and overloaded functions 的解决方法

java - 当参数为空值时,如何选择重载方法?

ruby-on-rails - 从 Impressionist Gem in Rails 4 重新打开 Impression 类

ruby-on-rails - 如何在 Ruby on Rails 中打补丁

ruby - 如何正确地对 Ruby 进行 monkeypatch?

python - 将for循环的输出写入python中的csv

python - 如何从 Pandas DataFrame 的每一行中选择特定列?

c++ - 函数重载中的隐式转换序列