• 技术文章 >头条

    python不同版本中的_new_有何不同

    小妮浅浅小妮浅浅2021-01-11 14:51:12原创3162

    我们都知道python的版本不同,在使用的时候就有所区别。鉴于我们推荐小伙伴们选择python3版本,所以这方面的区别了解的不是很多。就拿_new_来说,在python2和3中的写法是不一样的,之前有接触_new_的小伙伴想必没有注意到这个问题。接下来讲讲new的基本用法,然后就python不同版本中_new_的区别带来详解。

    1.new方法接受的参数虽然也是和init一样,但init是在类实例创建之后调用,而 new方法正是创建这个类实例的方法。

    class Person(object):
        """Silly Person"""
     
        def __new__(cls, name, age):
            print '__new__ called.'
            return super(Person, cls).__new__(cls, name, age)
     
        def __init__(self, name, age):
            print '__init__ called.'
            self.name = name
            self.age = age
     
        def __str__(self):
            return '<Person: %s(%s)>' % (self.name, self.age)
     
    if __name__ == '__main__':
        piglei = Person('piglei', 24)
    print piglei

    2.Python3和 Python2中__new__使用不同

    Python3的写法

    class Singleton(object):
        def __new__(cls,*args, **kwargs):
            if not hasattr(cls,'_inst'):
                print(cls)
                cls._inst = super(Singleton, cls).__new__(cls)
            return cls._inst

    如果Python3的写法跟Python2写法一样,那么倒数第二行会报错

    "TypeError: object() takes no parameters"

    根据上面的运行结果我们可以发现,在python3中强行使用python2的写法是不可行的。如果有小伙伴是习惯了python2的用法,换版本时要注意_new_写法的改变。

    专题推荐:python,new
    上一篇:利用python实现发送带附件的邮件 下一篇:python中hash的特点应用

    相关文章推荐

    • Python中__new__()和__init__()有什么区别?• Python之类方法、__new__方法和__init__方法介绍• Python中如何使用_new_实现单例模式• 一文读懂Python中__new__和__init__的区别与联系• python中实例化使用new方法吗• Python中的__new__()方法的使用

    全部评论我要评论

    © 2021 Python学习网 苏ICP备2021003149号-1

  • 取消发布评论
  • 

    Python学习网