最新公告
  • 欢迎您光临网站无忧模板网,本站秉承服务宗旨 履行“站长”责任,销售只是起点 服务永无止境!立即加入钻石VIP
  • Python之类方法、__new__方法和__init__方法介绍

    正文概述    2020-02-07   375

    在编程语言中创建一个类,有构造方法这样的一个术语。而在Python中,通常大家都认为__init__是构造方法,其实并不完全等同。在构建类中,有一个特殊的方法__new__,这个才能等同为构造方法。

    Python之类方法、__new__方法和__init__方法介绍

    __new__是一个类方法,我们在定义一个类方法时需要在函数前打上@classmethod装饰器,而__new__不需要,因为它经过特殊处理。为了理解__new__方法,我们先来看看类方法是什么。

    类方法

    class MyClass:
        @classmethod
        def test(cls):
            print(cls.__name__)
            
    MyClass.test()
    #输出 MyClass

    在MyClass类中,test方法就是类方法,它传入第一个参数为cls,其实就是MyClass类,打印cls.__name__可以看到结果。类方法可以直接 类名.方法名()调用。通常类方法是备选构造方法。

    类方法的应用

    >>> from datetime import datetime
    >>> datetime.fromtimestamp(324234)
    datetime.datetime(1970, 1, 5, 2, 3, 54)

    如上所示,内置的datetime包中的fromtimestamp就是类方法,可以从多种方式构造出datetime对象。

    相关推荐:《Python视频教程》

    __new__方法

    def __new__(cls, a):
        return super().__new__(cls)

    __new__是类方法,所以第一个参数也是cls,剩下的参数就是构造方法里需要的参数了。通常__new__都不需要定义,在元类编程中才需要,它可以控制类的生成过程。

    __new__必须返回一个实例(instance),传入到__init__方法中的self参数,也就是实例变量。这里返回父类(object)的__new__方法用来创建一个新的实例。相当于

    obj = object.__new__(MyClass)
    obj = MyClass()
    #obj是实例,上面两个方式等同

    其中,MyClass是类,obj是实例(instance)

    __init__方法

    __new__是构造方法,那么__init__就是初始化函数,它负责将变量绑定到实例中,更新实例的__dict__字典。其中第一个参数self就是__new__的返回值,是类的实例。__new__方法先于__init__方法执行。

    def __init__(self, a):
        self.a = a

    结合使用

    class MyClass:
        def __new__(cls, a):
            return super().__new__(cls)
        def __init__(self, a):
            self.a = a
    obj = MyClass(3)
    print(obj.a)

    要点

    1.__new__是构造方法,__init__是初始化函数。

    2.__new__通常不需要手动定义,一般在元类编程中使用,控制类的生成过程。

    3.__new__第一个被执行,然后执行__init__绑定实例变量。

    4.__new__必须有返回值,返回值是该类的实例,它会被__init__函数接收,通常叫做self变量。


    下载网 » Python之类方法、__new__方法和__init__方法介绍

    常见问题FAQ

    免费下载或者VIP会员专享资源能否直接商用?
    本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
    提示下载完但解压或打开不了?
    最常见的情况是下载不完整: 可对比下载完压缩包的与网盘上的容量,若小于网盘提示的容量则是这个原因。这是浏览器下载的bug,建议用百度网盘软件或迅雷下载。若排除这种情况,可在对应资源底部留言,或 联络我们.。
    找不到素材资源介绍文章里的示例图片?
    对于PPT,KEY,Mockups,APP,网页模版等类型的素材,文章内用于介绍的图片通常并不包含在对应可供下载素材包内。这些相关商业图片需另外购买,且本站不负责(也没有办法)找到出处。 同样地一些字体文件也是这种情况,但部分素材会在素材包内有一份字体下载链接清单。
    模板不会安装或需要功能定制以及二次开发?
    请QQ联系我们

    发表评论

    还没有评论,快来抢沙发吧!

    如需帝国cms功能定制以及二次开发请联系我们

    联系作者

    请选择支付方式

    ×
    迅虎支付宝
    迅虎微信
    支付宝当面付
    余额支付
    ×
    微信扫码支付 0 元