Python类的特点 (3) :静态方法与类方法

Python中的方法有4种:

1)模块中的全局方法,不属于任何类,用"模块名.方法名"形式调用。

2)类中定义的实例方法,也成为绑定方法(Bound method),这种方法的第一个参数(通常写作self,类似Java和C++的this),必须是调用该方法的实例本身,调用该方法时Python会自动将那个实例传递给该方法。

3)类中定义的静态方法,与Java中的静态方法一样,无需任何实例作为该方法的参数,用"类名.方法名"形式即可调用(用"实例.方法名"形式也能调用),定义方法时,需要用@staticmethod修饰符进行修饰。

4)还有一种方法叫类方法,也是在类中定义的,用类名和实例都能调用(即"类名.方法名"、"实例.方法名"),类方法的第一个参数(通常是cls),必须是包含这个方法的那个类,定义方法时,需要用@classmethod修饰符进行修饰,调用该方法时,Python会自动将该类作为参数传递给类方法。

测试代码:

 1 #encoding:utf-8
 2 class MyClass():
 3     name=‘‘
 4     def __init__(self,name):
 5         self.name=name
 6
 7     def foo(self,x):
 8         print ‘calling bound method foo() by instance "%s",x=%s..‘%(self.name,x)
 9
10     @staticmethod #静态方法修饰符
11     def fooStatic(z):
12         print ‘calling static method fooStatic(),z=%s..‘%z
13
14     @classmethod #类方法修饰符
15     def fooCls(cls,y):
16         print ‘calling class method fooCls() by class "%s",y=%s..‘ % (cls,y)
17
18 if __name__==‘__main__‘:
19     print ‘-----------下面开始调用实例方法-------------‘
20     mc=MyClass(‘mc‘)
21     mc.foo(5)
22     print ‘-----------下面开始调用类方法---------------‘
23     MyClass.fooCls(10)
24     mc.fooCls(10)
25     print ‘-----------下面开始调用静态方法-------------‘
26     MyClass.fooStatic(15)
27     mc.fooStatic(15)

输出结果:

-----------下面开始调用实例方法-------------
calling bound method foo() by instance "mc",x=5..
-----------下面开始调用类方法-------------
calling class method fooCls() by class "__main__.MyClass",y=10..
calling class method fooCls() by class "__main__.MyClass",y=10..
-----------下面开始调用静态方法-------------
calling static method fooStatic(),z=15..
calling static method fooStatic(),z=15..
时间: 2024-10-05 04:45:24

Python类的特点 (3) :静态方法与类方法的相关文章

python中的实例方法、静态方法和类方法

对于python中类的这三种方法,之前一直都不清楚其中的差别,最近阅读了<编写高质量代码 改善python程序的91个建议>,颇受启发,现在写出来分享下. 先看下面的一段代码 1 # !/usr/bin/env python 2 # -*- coding:utf-8 -*- 3 4 class A: 5 name = "A class" 6 7 def instance_method(self): 8 print "this is instance fun&quo

python中的实例方法、静态方法、类方法、类变量和实例变量

http://www.jb51.net/article/49402.htm 注:使用的是Python2.7. 一.实例方法 实例方法就是类的实例能够使用的方法.如下: 复制代码 代码如下: class Foo:    def __init__(self, name):        self.name = name    def hi(self):        print self.name if __name__ == '__main__':    foo01 = Foo('letian')

类的实例方法、静态方法、类方法及静态属性

1.类的方法,按照调用方式可以分为3种,实例方法.静态方法.和类方法 1.1 实例方法   实例方法只能通过实例对象调用,不能通过类进行调用.实例方法再定义时候使用关键字self,self代表实例对象本身. class A(): x=100 def fun(self,y): self.x+=y a=A() a.fun(10) print(a.x) A.fun(10) *****结果****** 110 Traceback (most recent call last): #类调用错误 File

python静态方法和类方法

静态方法是类和类的独立实例.它是在类范围中定义的方法. 它可以直接由类和实例被称为. 类方法和静态方法都要使用装饰器来定义,定义的基本格式是: @staticmethod def <function name>(): #do something 类方法定义的基本格式是: @ classmethod def <function name>(cls): #do something 类方法与成员方法不同的是,它须要传入參数cls,cls代表类. class Myclass(): x='c

python类:类方法和静态方法

http://blog.csdn.net/pipisorry/article/details/49516185 面相对象程序设计中,类方法和静态方法是经常用到的两个术语.逻辑上讲:类方法是只能由类名调用:静态方法可以由类名或对象名进行调用.在C++中,静态方法与类方法逻辑上是等价的,只有一个概念,不会混淆.在python中,方法分为三类实例方法.类方法.静态方法. @classmethod和@staticmethod 他们的使用场景并不一样.在python中,两种方法的主要区别在于参数 类内部普

python类的静态方法和类方法区别

# python类的静态方法和类方法区别 ## 先看语法,python 类语法中有三种方法,实例方法,静态方法,类方法. 本文由黄哥python培训黄哥所写. # coding:utf-8 class Foo(object): """类三种方法语法形式""" def instance_method(self): print("是类{}的实例方法,只能被实例对象调用".format(Foo)) @staticmethod def

Python:类属性,实例属性,私有属性与静态方法,类方法,实例方法

From: http://www.cnblogs.com/pengsixiong/p/4823473.html 属性分为实例属性与类属性 方法分为普通方法,类方法,静态方法 一:属性: 尽量把需要用户传入的属性作为实例属性,而把同类都一样的属性作为类属性.实例属性在每创造一个类是都会初始化一遍,不同的实例的实例属性可能不同,不同实例的类属性都相同.从而减少内存. 1:实例属性: 最好在__init__(self,...)中初始化 内部调用时都需要加上self. 外部调用时用instancenam

python中的静态方法和类方法

静态方法独立于类和类的实例,它是定义在类作用域内的方法.可以由类和实例直接调用. 类方法和静态方法都要使用装饰器来定义,定义的基本格式是: @staticmethod def <function name>(): #do something 类方法定义的基本格式是: @ classmethod def <function name>(cls): #do something 类方法与成员方法不同的是,它需要传入参数cls,cls代表类. class Myclass(): x='cla

python——实例方法、静态方法、类方法、类变量和实例变量浅析

概述: 实例方法就是类的实例能够使用的方法. 静态方法是一种普通函数,就位于类定义的命名空间中,它不会对任何实例类型进行操作.使用装饰器@staticmethod定义静态方法.类对象和实例都可调用静态方法. 类方法是将类本身作为对象进行操作的方法.类方法使用@classmethod装饰器定义,其第一个参数是类,约定写为cls.类对象和实例都可以调用类方法. super用来执行父类中的函数. 类变量定义在类的定义之后,实例变量则是以为self.开头. 如何调用父类的构造函数:子类(派生类)并不会自