• Python标准库:内置函数classmethod(function)


    把类函数当作类的一个方法返回。

    类方法第一个參数是指明类,跟类中函数一样,第一个參数是指明类实例。

    类方法修饰符採用以下的格式来使用:

    class C:

    @classmethod

    def f(cls, arg1, arg2, ...):

    ...

    从上面格式来看,@classmethod是函数在前置的一个修饰符。能够查看语言參考手冊。

    经过类方法修饰符的函数,能够直接通过类来调用,比方C.f()方式。也能够通实例的方式来调用,比方C().f()方式,但这个实例在这个函数里被忽略掉了,没起到什么作用。

    假设类方法修饰符的函数,在继承类时,派生类作为第一个參数传递给这个函数,也就是cls等于派生类。

    类方法修饰符定义的函数与C++JAVA里静态函数是不一样的,假设要类似的功能。须要使用另外一个修饰符staticmethod

    classmethod设计的目的是什么呢?事实上与Python面向对象编程有关的,由于Python不支持多个的參数重载构造函数,比方在C++里,构造函数能够依据參数个数不一样。能够写多个构造函数。Python为了解决问题,採用classmethod修饰符的方式,这样定义出来的函数就能够在类对象实例化之前调用这些函数,就相当于多个构造函数,解决多个构造函数的代码写在类外面的问题。

    与修饰符staticmethod的差别是类方法有一个类型參数,而静态方法没有。静态方法主要用来解决全局函数的作用域的问题,而类方法是解决多个构造函数的问题。因此应用场境不一样。

    样例:

    #classmethod()
    
    class C:
        def __init__(self, i):
            print('__init__: %d' % i)
        @classmethod
        def f(cls, name):
            print(name)
            return C(int(name))
            
    a = C(1)
    b = C.f('10')
    c = C(2).f('100')
            
    class D(C):
        pass
        
    D.f('20')

    输出结果例如以下:

    __init__: 1

    10

    __init__: 10

    __init__: 2

    100

    __init__: 100

    20

    __init__: 20


  • 相关阅读:
    MySQL的B+树索引底层构成
    Mybatis 使用注解和Provider类实现动态条件查询
    EF批量插入数据耗时对比
    NOPI Excel 读取公式生成后的数据
    EF 记录执行的sql语句
    c# Redis操作类
    c# ExpandoObject动态扩展对象
    微信小程序干货
    mysql中将多行数据合并成一行数据
    Flask 学习系列(四)---Jinjia2 模板继承
  • 原文地址:https://www.cnblogs.com/zfyouxi/p/5222811.html
Copyright © 2020-2023  润新知