继承 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-06-14 17:48:32 +08:00
应该可以
|
2
xiahei 2016-06-14 17:49:57 +08:00
可以。
|
3
eric6356 2016-06-14 18:14:50 +08:00
请问楼上,具体应该怎么做呢?
实例化 MyFloat 必然会调用 float.__new__,而这个方法应该只接收 1 个参数吧。 而实例化 MyFloat 必然需要 2 个参数。 __new__ 先于 __init__ 被调用(没记错的话__new__应该是实例化的时候最先被调用的),那么除了改写__new__方法以外,还有什么办法可以控制 float.__new__所接收的参数呢? |
4
eric6356 2016-06-14 18:16:46 +08:00
|
5
JhZ7z587cYROBgVQ 2016-06-14 18:31:11 +08:00
@eric6356 确实如你所说,感觉不是很好做,能不能干脆不继承 float 呢?
|
8
eric6356 2016-06-14 18:48:33 +08:00
@xiahei 因为楼主说的想要继承 float...
如果不继承 float 的话,那要想办法把所有 float 的 method 都搬过来,这有点麻烦。 另外 isinstance 和 type 之类的该怎么处理呢? 其实我觉得写一个简单的 function 而不是 class 可能更方便。 |
10
hitmanx 2016-06-14 19:29:30 +08:00
感觉一般语言都不建议从基本类型继承吧,相对来说推荐用组合取代继承。
|