我可以更改Python中变量的默认类型吗?

我可以更改Python中变量的默认类型吗?,python,python-2.7,ironpython,Python,Python 2.7,Ironpython,理想情况下,我希望能够将赋值重定向到我的类,而不是内置的Python类。例如: class MyInt(int): def __add__(self, other): #some type checking logic #convert string to int if needed return int(self) + int(other) # def __everything_else__ ... a = 1 # sur

理想情况下,我希望能够将赋值重定向到我的类,而不是内置的Python类。例如:

class MyInt(int):
    def __add__(self, other):
         #some type checking logic
         #convert string to int if needed
         return int(self) + int(other)
    # def __everything_else__ ...
a = 1

# sure I could declare:
a = MyInt(1)
# but this isn't ideal because:
b = 2

print a + b # cool, this uses my overload
print b + a # hmmm, not my logic, bad

#Now consider:
c = "1"

print b < c # Does not make sense, really 2 < 1, not very Perly :)
类MyInt(int):
定义添加(自身、其他):
#一些类型检查逻辑
#如果需要,将字符串转换为int
返回整数(自身)+整数(其他)
#定义所有其他内容。。。
a=1
#我当然可以声明:
a=MyInt(1)
#但这并不理想,因为:
b=2
打印a+b#酷,这使用了我的重载
打印b+a#嗯,不是我的逻辑,糟糕
#现在考虑:
c=“1”
打印b
环境是IronPython 2.7 有什么想法吗?我知道强迫人们打字是违背python的格言的,但有时人们需要保护自己,特别是在没有抛出错误的情况下。例如: 对于我们来说,这是一个巨大的反对python作为脚本环境的例子,特别是当我们需要移植Perl代码时(请参阅“使用时键入”)。 实际上,我认为我可能过于依赖编译器错误,因为.NET是运行时,但错误不要级联是很重要的


更改文本以使用您的类型并不是您真正想要的。之后 总之,len(事情)不是字面意思,但你会希望它成为一个事实 MyInt也是。我可能会说,你想要的是改变 内置类型的混合类型操作,但这不是很普遍 足够地我想你想要的是Perl。如果你想尝试 Python在如此低的级别上表现得像Perl,您将 遇到无数其他的头疼问题。我建议你要么坚持 或者当您 移植它


的确如此。这不仅仅是一个操作符重载练习,它是语言的核心。有一个代码,它的行为可能会因为干预基本类型而改变

定义
\uuu radd\uuu
,并且
b+a
也将使用您的方法。更改文本以使用您的类型并不是您真正想要的。毕竟,
len(thing)
不是一个文字,但你也会希望它是一个
MyInt
。我可能会说,您希望更改内置类型的混合类型操作的行为,但这还不够普遍。我想你想要的是Perl。如果您想让Python在如此低的级别上表现得像Perl,那么您将遇到无数其他的麻烦。我建议您要么坚持使用Perl,要么在移植时更改依赖Perl风格行为的代码。谢谢。我同意,Perl为我们提供了很好的服务,但对我需要使用它的人来说太难了。我得到的答案是一个脚本,它将脚本类型解析为ast,并确保所有的“gotchas”都不存在。在一些非常低的级别上,我需要python以不同的方式运行,但是修改和重新编译源代码可能需要花费太多的时间。再次感谢。@user2357112由于不可能分叉IronPython并对其进行自定义,我认为这基本上是一个答案,应该这样发布:)…再次查看您的问题,我发现您从未说过任何关于文字的内容。您说的“更改变量的默认类型”,可能意味着某种类型的静态类型和赋值时的自动转换。大多数评论仍然成立,但我认为睡眠剥夺正在起作用。该睡觉了。