关于重写父类__new__()方法的疑惑

2016-06-14 17:24:46 +08:00
 sudo987

继承 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__()里面进行,现实中的实用性不考虑,只谈可行性。

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

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/285698

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX