
继承 float ,新的类可以以Myfloat(a, b)的方式生成 float ,实现对 float a 小数点后 b 位的四舍五入。
class Myfloat(float): def __new__(cls, a, b): return super(Myfloat, cls).__new__(cls, round(f, b)) 我的问题是,对 float 的定制可否在__init__()里面进行,现实中的实用性不考虑,只谈可行性。
1 qianbaooffer 2016 年 6 月 14 日 应该可以 |
2 xiahei 2016 年 6 月 14 日 可以。 |
3 eric6356 2016 年 6 月 14 日 请问楼上,具体应该怎么做呢? 实例化 MyFloat 必然会调用 float.__new__,而这个方法应该只接收 1 个参数吧。 而实例化 MyFloat 必然需要 2 个参数。 __new__ 先于 __init__ 被调用(没记错的话__new__应该是实例化的时候最先被调用的),那么除了改写__new__方法以外,还有什么办法可以控制 float.__new__所接收的参数呢? |
4 eric6356 2016 年 6 月 14 日 |
5 JhZ7z587cYROBgVQ 2016 年 6 月 14 日 @eric6356 确实如你所说,感觉不是很好做,能不能干脆不继承 float 呢? |
8 eric6356 2016 年 6 月 14 日 @xiahei 因为楼主说的想要继承 float... 如果不继承 float 的话,那要想办法把所有 float 的 method 都搬过来,这有点麻烦。 另外 isinstance 和 type 之类的该怎么处理呢? 其实我觉得写一个简单的 function 而不是 class 可能更方便。 |
10 hitmanx 2016 年 6 月 14 日 感觉一般语言都不建议从基本类型继承吧,相对来说推荐用组合取代继承。 |