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

美女程序员鼓励师

我们都知道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_有何不同 的全部内容, 来源链接: utcz.com/z/541649.html

回到顶部