我想给int
一个函数,例如:
>>> def x.converttostring():
... return str(self)
>>> x = 1
>>> print x.converttostring()
'1'
>>> print x
1
理想情况下,我想让它在选择的整数上运行,而不是所有的整数,例如
>>> x.converttostring()
'1'
>>> y.converttostring()
Traceback (most recent call last):
...
AttributeError: 'int' object has no attribute 'converttostring'
有可能吗?函数部分是必不可少的(不是str(x)
),创建一个类是不可能的。
答案 0 :(得分:4)
在Python中,int
是一个类。
这:
理想情况下,我想让它在选择的int上运行,而不是所有的整数。
使用子类化
可以轻松实现例如,您可以创建SpecialInt
类:
class SpecialInt(int):
def some_strange_method(self):
return self + 1
此类的行为与int
完全相同,但还有其他行为。
之后,您可以这样实例化您的课程:
special_int = SpecialInt(4)
print special_int.some_strange_method()
>>> 5
您也可以从基类覆盖所需的任何内容。
请记住,SpecialInt
的所有操作都会产生int
实例,除非您覆盖操作方法,例如__add__
。请参阅documentation中的完整数字类型规范和emulating numeric types上的指南。
答案 1 :(得分:0)
我没有看到任何情况下这是一个正确的解决方案,但您可以尝试创建一个子类:
class MyInt(int):
def custom_method(self):
return "Int: " + str(self)
i = MyInt(3)
assert i == 3
assert i+2 == 5
assert i.custom_method() == "Int: 3"
答案 2 :(得分:-1)
显然你无法向int添加对象,没有 dict ,这似乎是一项基本要求。子类的问题在于尝试定义以下
A,B,C =范围(0,3)
使用int'它是非常干净的语法,子类变得相对凌乱。感谢您的帮助: - )
我会试着弯曲一本字典而不是我的意志!