zoukankan      html  css  js  c++  java
  • python 静态方法和类方法

    来源:http://jianfeihit.iteye.com/blog/1839554

    http://www.cnblogs.com/bjdxy/archive/2012/12/04/2802164.html

    1、新的对象模型提供了两种类方法(传统对象模型没有这些方法):静态方法和类方法
    2、静态方法可以直接被类或类实例调用。它没有常规方法那样的特殊行为(绑定、非绑定、默认的第一个参数规则等等)。完全可以将静态方法当成一个用属性引用方式调用的普通函数来看待。
    3、一个类方法就是你可以通过类或它的实例来调用的方法, 不管你是用类调用这个方法还是类的实例调用这个方法,python只会将实际的类对象做为该方法的第一个参数.记住:方法的第一个参数都是类对象而不是实例对象. 按照惯例,类方法的第一个形参被命名为 cls
    4、类方法和静态方法都可以被类和类实例调用,类实例方法仅可以被类实例调用
    5、类方法的隐含调用参数是类,而类实例方法的隐含调用参数是类的实例,静态方法没有隐含调用参数
    6、新型类中新增加了slots和property,这两个比较特殊
    7、实例可以拥有与类不一样的方法,这个是通过动态绑定实现的。

     
    复制代码
    class TestClassMethod(object):
    
        METHOD = 'method hoho'
    
        def __init__(self):
            self.name = 'leon'
    
        def test1(self):
            print 'test1'
            print self
    
        @classmethod
        def test2(cls):
            print cls
            print 'test2'
            print TestClassMethod.METHOD
            print '----------------'
    
        @staticmethod
        def test3():
            print TestClassMethod.METHOD
            print 'test3'
    
    if __name__ == '__main__':
        a = TestClassMethod()
        a.test1()
        a.test2()
        a.test3()
        TestClassMethod.test3()
    复制代码

    test1为实例方法

    test2为类方法,第一个参数为类本身

    test3为静态方法,可以不接收参数

    类方法和静态方法皆可以访问类的静态变量(类变量),但不能访问实例变量,test2、test3是不能访问self.name的,而test1则可以

    程序运行结果:

  • 相关阅读:
    Agile PLM bom表结构学习笔记
    火狐书签同步服务无法同步问题解决
    EasyExcel使用笔记
    给EasyUI查询按钮添加回车事件.
    让bat异常之后不直接关闭窗口的办法.
    DROP TABLE、TRUNCATE TABLE和DELETE的区别
    DUMPBIN工具的使用
    Java Build Path 详解
    用eclipse中打开已存在的Java Project
    .net core、微服务 开源项目
  • 原文地址:https://www.cnblogs.com/stevenzeng/p/5181665.html
Copyright © 2011-2022 走看看