zoukankan      html  css  js  c++  java
  • python @staticmethod和@classmethod

    首先记住: 面向对象的三大特点是 数据封装、继承和多态

    python 其实有3个方法,即静态方法(@staticmethod),类方法(@classmethod)和实例方法;

    class A(object):
        def foo(self,x):
            print u"A类下函数foo的参数:",x
        @classmethod#类方法
        def class_foo(cls,x):
            print u"A类下函数class_foo的参数:",x
    
        @staticmethod
        def static_method(x):
            print u"A类下函数static_foo的参数:",x
    
    
    a=A()
    a.foo("w")
    a.class_foo("e")
    a.static_method("r")
    
    # A.foo("t")报错
    A.static_method("Y")
    A.class_foo("U")

    普通实例方法,第一个参数需要是self,它表示一个具体的实例本身。

    静态方法

    如果用了装饰器@staticmethod,那么就可以无视这个self,而将这个方法当成一个普通的函数使用。

    类方法

    而对于装饰器@classmethod,它的第一个参数不是self,是cls,它表示这个类本身。

    注意:

    实例方法的调用离不开实例,需要把实例自己传给函数,所有类里的函数需要foo(sel,x),类方法一样,只不过他传递的是类不是实例,A.class_foo(x);

    对于静态方法和普通的方法一样,不需要对谁进行绑定,唯一的区别是调用的时候需要使用a.static_foo(x)或者A.static_foo(x)来调用。

     类的一些相关知识:

     
  • 相关阅读:
    虚拟机中硬盘扩展方法
    ubuntu postgresql install
    vim python
    oe7报表的中文乱码
    文件导入 import
    How do I list user defined types in a SQL Server database
    修改表结构
    查询数据库中所有的表和数据库架构
    Dev chartControl添加提示层信息
    最简单的日志
  • 原文地址:https://www.cnblogs.com/qxh-beijing2016/p/12977037.html
Copyright © 2011-2022 走看看