V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
sudo987
V2EX  ›  Python

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

  •  
  •   sudo987 · 2016-06-14 17:24:46 +08:00 · 2509 次点击
    这是一个创建于 3113 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

    10 条回复    2016-06-14 19:29:30 +08:00
    qianbaooffer
        1
    qianbaooffer  
       2016-06-14 17:48:32 +08:00
    应该可以
    xiahei
        2
    xiahei  
       2016-06-14 17:49:57 +08:00
    可以。
    eric6356
        3
    eric6356  
       2016-06-14 18:14:50 +08:00
    请问楼上,具体应该怎么做呢?
    实例化 MyFloat 必然会调用 float.__new__,而这个方法应该只接收 1 个参数吧。
    而实例化 MyFloat 必然需要 2 个参数。
    __new__ 先于 __init__ 被调用(没记错的话__new__应该是实例化的时候最先被调用的),那么除了改写__new__方法以外,还有什么办法可以控制 float.__new__所接收的参数呢?
    eric6356
        4
    eric6356  
       2016-06-14 18:16:46 +08:00
    JhZ7z587cYROBgVQ
        5
    JhZ7z587cYROBgVQ  
       2016-06-14 18:31:11 +08:00
    @eric6356 确实如你所说,感觉不是很好做,能不能干脆不继承 float 呢?
    xiahei
        6
    xiahei  
       2016-06-14 18:38:16 +08:00
    @eric6356 为什么非要从`float`继承呢?
    sudo987
        7
    sudo987  
    OP
       2016-06-14 18:44:44 +08:00 via iPhone
    @xiahei 不从 float 继承怎么做?
    eric6356
        8
    eric6356  
       2016-06-14 18:48:33 +08:00
    @xiahei 因为楼主说的想要继承 float...
    如果不继承 float 的话,那要想办法把所有 float 的 method 都搬过来,这有点麻烦。
    另外 isinstance 和 type 之类的该怎么处理呢?
    其实我觉得写一个简单的 function 而不是 class 可能更方便。
    sudo987
        9
    sudo987  
    OP
       2016-06-14 18:56:55 +08:00 via iPhone
    @eric6356 好吧
    hitmanx
        10
    hitmanx  
       2016-06-14 19:29:30 +08:00
    感觉一般语言都不建议从基本类型继承吧,相对来说推荐用组合取代继承。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5347 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 31ms · UTC 09:10 · PVG 17:10 · LAX 01:10 · JFK 04:10
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.