资讯专栏INFORMATION COLUMN

Python的 函数、类方法、实例方法、静态方法

DDreach / 3293人阅读

摘要:类方法也叫类型方法,在该方法上一行,用进行标记。实例方法没有和标记的方法是实例方法。第一个参数强制为,类实例对象。首先该方法是类内部定义的函数,是类方法属性。上代码一般方法实例方法类方法静态方法一般方法此方法的工作跟类实例均无关系。


一、知识点^_^

函数:我一般习惯把跟类无关叫成函数,而类里面实现的叫方法。

类方法:也叫类型方法,在该方法上一行,用@classmethod进行标记。
第一个参数强制为cls,类对象。可以通过这个类对象访问类属性,由于没有传入类实例对象,所以不能访问类实例属性。

静态方法:用@staticmethod标记的方法。无内定的参数,类和实例都可以调用,方法有多少参数就必须传递多少参数。

实例方法:没有@classmethod@staticmethod标记的方法是实例方法。
第一个参数强制为self,类实例对象。可以通过这个类实例对象访问类属性,可以通过类实例对象的__class__属性访问类属性。
假设该方法有n个参数,类型调用的时候需要给n个参数传参。而实例调用时则只能传n-1个参数,因为第一个参数被系统默认传递了实例本身。

二、举例说明

先来了解一下绑定的概念。

绑定binding:它与方法调用相关联。
首先该方法是类内部定义的函数,是类方法属性。
类方法中,第一个参数都是self,表示调用此方法的实例对象,不需要赋值。
且该方法只有在其所属类拥有实例对象时,才能被调用,即方法绑定到类实例对象上了。
没有类实例对象时,方法就是未绑定状态。

上代码:

def foo(x):                # 一般方法
    print "executing foo(%s)"%(x)
    
class A(object):           
    def foo(self,x):    # 实例方法
        print "executing foo(%s,%s)"%(self,x)
        
    @classmethod        # 类方法          
    def class_foo(cls,x):
        print "executing class_foo(%s,%s)"%(cls,x)

    @staticmethod        # 静态方法
    def static_foo(x):
        print "executing static_foo(%s)"%x
a=A()

1、 一般方法
此方法的工作跟类、实例均无关系。可以直接调用foo(x)。
2、 实例方法
在类里定义实例方法时第一个参数永远是实例变量self(绑定类的实例),实例方法的调用离不开实例,调用:a.foo(x),其中a是A的实例。
3、 类方法 @classmethod
类方法定义时需要去绑定类(即通过cls)。调用的时候传递的是类,调用:A.class_foo(x),其中A是类。
4、 静态方法@staticmethod
与普通方法一样,不需要对类或实例进行绑定,but调用时需要通过类或实例,调用:a.static_foo(x)或A.static_foo(x)。


❤ thanks for watching, keep on updating...
点个赞再走吧

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/44794.html

相关文章

  • Python中使用静态或抽象方法权威指南

    摘要:在中,可以将和装饰器放在上面和的接口相反,你可以在抽象方法中实现代码并通过调用它在上面的例子中,继承来创建的每个都必须重写方法,但是可以使用来获取出处 Python中方法的工作方式 方法是存储在类属性中的函数,你可以用下面这种方式声明和访问一个函数 >>> class Pizza(object): ... def __init__(self, size): .....

    cheukyin 评论0 收藏0
  • [转载]Python方法绑定——Unbound/Bound method object一些梳理

    摘要:本篇主要总结中绑定方法对象和未绑定方法对象的区别和联系。在中使用描述器有翻译的链接来表示具有绑定行为的对象属性,使用描述器协议方法来控制对具有绑定行为属性的访问,这些描述器协议方法包括和。其中通过限定的必须使用实例才能调用。 本篇主要总结Python中绑定方法对象(Bound method object)和未绑定方法对象(Unboud method object)的区别和联系。主要目的...

    yankeys 评论0 收藏0
  • Python方法静态方法之间区别

      小编写这篇文章的主要目的,是讲述一下关于Python的一些小技巧,包括类方法与静态方法之间,存在一些什么区别呢?怎么从真正的意义上去理解关于其不同之间的区别呢?下面就给大家详细的解答下。  前言  在python的类中不仅可以有methods,还可以有变量,这些变量称为类属性,例如如下代码中Book类的TYPES即为类属性。  类中的方法分为3类:  1.实例方法instance method...

    89542767 评论0 收藏0
  • python

    摘要:类方法,第一个参数必须要默认传类,一般习惯用。特别说明,静态方法也可以实现上面功能,当静态方法每次都要写上类的名字,不方便。 Python-类属性,实例属性,类方法,静态方法,实例方法 类属性和实例属性 #coding:utf-8 class Student(object): name = I am a class variable #类变量 >>> s = Student(...

    leanote 评论0 收藏0
  • Python OOP 面向对象编程

    摘要:时代,如果需要手动继承,如多态多态是指,不同的子类对象调用相同的父类方法,会产生多态多样结果的编程特性。 参考:黑马程序员教程 - Python基础 面向对象 OOP三大特性,且三个特性是有顺序的: 封装 继承 多态 封装 指的就是把现实世界的事务,封装、抽象成编程里的对象,包括各种属性和方法。这个一般都很简单,不需要多讲。 唯一要注意的就是:推荐从小往大开始封装、开发类。比如手枪...

    weknow619 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<