zoukankan      html  css  js  c++  java
  • Python 进阶_OOP 面向对象编程_静态方法和类方法

    目录

    静态方法

    静态方法仅是类中的函数, 不需要绑定实例, 也就是说静态方法的定义不需要传入 self 参数. 静态方法不属于类的某一个实例对象, 而是属于类本身, 所以不需要绑定到实例对象. 可以通过 className.staticMethodName 的方式来调用.
    特点: 只能使用静态变量, 所以始终占用同一个内存, 执行效率更高, 但不会被自动回收.
    应用场景: 用于处理一些不会经常改变, 但却会被频繁调用的数据. EG: Connect String/Config info
    Note: 静态成员不能访问非静态成员, 因为非静态成员只有在被调用时才会被加载进内存, 而静态成员是长驻内存且不会被自动回收的, 所以非静态成员却可以访问静态成员.

    类方法

    类方法和实例方法类似, 区别在于前者需要定义 类对象参数 cls 而后者需要定义 实例对象参数 self. 两者在绑定方法调用中, 都会自动的传递相应的对象到第一次参数 (cls/self) 中.

    使用函数修饰符来声明静态方法和类方法

    In [1]: class TestStaticMethod(object):
       ...:     @staticmethod
       ...:     def foo():
       ...:         print "Calling static method foo()"
       ...:         
    
    In [2]: class TestClassMethod(object):
       ...:     @classmethod
       ...:     def foo(cls):
       ...:         print "Calling class method foo()"
       ...:         print "foo() is part of class:", cls.__name__
       ...:         
    
    In [3]: tsm = TestStaticMethod()
    
    In [4]: tsm.foo()
    Calling static method foo()
    
    In [5]: tcm = TestClassMethod()
    
    In [6]: tcm.foo()
    Calling class method foo()
    foo() is part of class: TestClassMethod
    # 类方法中的 cls 参数表示类对象自身
  • 相关阅读:
    模拟赛2020.9.11
    棋盘(dfs)
    树的重心
    模拟赛9.4
    最大数(线段树)
    [模板] 线段树
    [模板][数据结构] 树状数组
    [AHOI2018初中组][二分查找] 分组
    [模板] Kruskal 求最小生成树
    [模板] 最近公共祖先(LCA)的几种求法
  • 原文地址:https://www.cnblogs.com/jmilkfan-fanguiju/p/10589889.html
Copyright © 2011-2022 走看看