zoukankan      html  css  js  c++  java
  • 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


  • 相关阅读:
    Study Plan The TwentySecond Day
    Study Plan The Nineteenth Day
    Study Plan The TwentySeventh Day
    Study Plan The Twentieth Day
    Study Plan The TwentyFirst Day
    python实现进程的三种方式及其区别
    yum makecache
    JSONPath 表达式的使用
    oracle执行cmd的实现方法
    php daodb插入、更新与删除数据
  • 原文地址:https://www.cnblogs.com/zfyouxi/p/5222811.html
Copyright © 2011-2022 走看看