问题描述
首先,这不是如何获得特定结果的问题,而是有关Python的内部工作原理的问题。我是编程的新手,所以请告诉我我是否使用了错误的术语。我的假设是围绕一个非常基本的错误。我尝试运行:
"My age is " + 46
显然,这会出现“无法将'int'对象转换为隐式str”错误。没有将字符串添加到整数的定义,但是我可以创建一个吗?
我的第一个问题是,对于字符串和整数之类的内置类,这是否可行?我环顾四周,不认为是那样,但是如果有人知道我会感兴趣的方式。
我的第二个问题是,如果我定义了两个新类,它们在各个方面的行为都类似于字符串和整数,但不是内置的,是否可以定义两个类的加法?我知道我可以定义同一个类的加法,但是两个不同的类又如何呢?
最后,加法(无论是直接是字符串和整数还是两个类,例如字符串和整数)应产生:“我的年龄是46岁”,方法是在添加整数之前将整数转换为字符串。
谢谢!
解决方法
关于第一个问题:更改内置类基本上是不可能的。尽管您可以与其他类混淆,但这通常是一个糟糕的主意。相反,您可以创建一个具有所需属性的子类。
例如:
class mystr(str):
def __add__(self,other):
return mystr(str(self) + str(other))
此代码继承了str
类的所有属性,除了我们要更改的属性,即其添加行为。通过将self
强制转换为str
,我们仍然将委托委托给str
,但是我们还将另一个参数强制转换为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
(不过,我根本不知道这将是多么有用。)