zoukankan      html  css  js  c++  java
  • 类的三种方法

    对于实例方法,在类里每次定义实例方法的时候都需要指定实例(该方法的第一个参数,名字约定成俗为self)。这是因为实例方法的调用离不开实例,我们必须给函数传递一个实例。假设对象a具有实例方法 foo(self, *args, **kwargs),那么调用的时候可以用 a.foo(*args, **kwargs),或者 A.foo(a, *args, **kwargs),在解释器看来它们是完全一样的。

    类方法每次定义的时候需要指定类(该方法的第一个参数,名字约定成俗为cls),调用时和实例方法类似需要指定一个类。

    静态方法其实和普通的方法一样,只不过在调用的时候需要使用类或者实例。之所以需要静态方法,是因为有时候需要将一组逻辑上相关的函数放在一个类里面,便于组织代码结构。一般如果一个方法不需要用到self,那么它就适合用作静态方法。

    def foo(x):
    print "executing foo(%s)"%(x)


    class A(object):
    def foo(self):
    print "executing foo(%s)" % self

    @classmethod
    def class_foo(cls):
    print "executing class_foo(%s)" % cls

    @staticmethod
    def static_foo():
    print "executing static_foo()"

    a = A()
    print a.foo
    print A.foo

    print a.class_foo
    print A.class_foo

    print A.static_foo
    print a.static_foo
    print foo

    # <bound method A.foo of <__main__.A object at 0x10d5f90d0>>
    # <unbound method A.foo>
    # <bound method type.class_foo of <class '__main__.A'>>
    # <bound method type.class_foo of <class '__main__.A'>>
    # <function static_foo at 0x10d5f32a8>
    # <function static_foo at 0x10d5f32a8>
    # <function foo at 0x10d5f1ed8>

  • 相关阅读:
    data-icon=""图片还可以是自定义的?
    orientationchange不管用啊
    menu({postion:{my:"left top"},at:"right bottom"})里的my与at会冲突吗
    关于position的疑惑
    Linux
    C++
    MATLAB
    SCE
    SFLA混合蛙跳算法
    memetic algorithm
  • 原文地址:https://www.cnblogs.com/EmptyRabbit/p/7687469.html
Copyright © 2011-2022 走看看