像处理类一样处理int并赋予它属性

时间:2015-09-28 13:57:55

标签: python class int

我想给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)),创建一个类是不可能的。

3 个答案:

答案 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'它是非常干净的语法,子类变得相对凌乱。感谢您的帮助: - )

我会试着弯曲一本字典而不是我的意志!