• Python classmethod 修饰符


    描述

    classmethod 修饰符对应的函数不需要实例化,不需要 self 参数,但第一个参数需要是表示自身类的 cls 参数,可以来调用类的属性,类的方法,实例化对象等。

    语法

    classmethod 语法:

    classmethod
    

    参数

    • 无。

    返回值

    返回函数的类方法。

    实例

    以下实例展示了 classmethod 的使用方法:

    # !/usr/bin/python
    # -*- coding: UTF-8 -*-
    
    class A(object):
        bar = 1
        def func1(self):
            print('foo')
        @classmethod
        def func2(cls):
            print('func2')
            print(cls.bar)
            cls().func1()# 调用 foo 方法
            
    A.func2()# 不需要实例化

    输出结果为:

    func2
    1
    foo

    上面是例1,下面是例2

    class A(object):
    
        # 属性默认为类属性(可以给直接被类本身调用)
        num = "类属性"
    
        # 实例化方法(必须实例化类之后才能被调用)
        def func1(self): # self : 表示实例化类后的地址id
            print("func1")
            print(self)
    
        # 类方法(不需要实例化类就可以被类本身调用)
        @classmethod
        def func2(cls):  # cls : 表示没用被实例化的类本身
            print("func2")
            print(cls)
            print(cls.num)
            cls().func1()
    
        # 不传递传递默认self参数的方法(该方法也是可以直接被类调用的,但是这样做不标准)
        def func3():
            print("func3")
            print(A.num) # 属性是可以直接用类本身调用的
        
    # A.func1() 这样调用是会报错:因为func1()调用时需要默认传递实例化类后的地址id参数,如果不实例化类是无法调用的
    A.func2()
    A.func3()

    结果:

    func2
    <class '__main__.A'>
    类属性
    func1
    <__main__.A object at 0x000001D820F99978>
    func3
    类属性

     当我们定义了一个类属性后,这个属性虽然归类所有,但类的所有实例都可以访问到。

  • 相关阅读:
    .请写出常用的linux指令
    Maven常用命令有哪些
    Maven的工程类型有哪些
    eclipse中Build Path 导入的包和复制到 lib 包的区别
    马踏棋盘算法递归+回溯法实现 C语言
    微信开发之移动手机WEB页面(HTML5)Javascript实现一键拨号及短信发送功能
    Android_保存用户名和密码码sharedPreference
    Android---XML序列化
    直接拿来用!最火的Android开源项目
    异步http开源框架使用(AsyncHttpClient)
  • 原文地址:https://www.cnblogs.com/zrmw/p/11527306.html
Copyright © 2020-2023  润新知