静态方法和类成员方法(Python)

静态方法和成员方法分别在创建时分别被装入Staticmethod 类型和 Classmethod类型的对象中。静态方法的定义没有 self参数,且能够被类本身直接调用,类方法在定义时需要名为 cls的类似于self的参数,类成员方法可以直接用类的具体对象调用。但cls参数是自动被绑定到类的,请看下面例子:

 1 __metaclass__ = type
 2
 3 class Myclass:
 4
 5 def smeth():
 6 print "This is a static method"
 7 smeth = staticmethod(smeth)
 8
 9 def cmeth(cls):
10 print "This is a class method of", cls
11 cmeth = classmethod(cmeth)

手动包装和替换方法的技术看起来有点单调。在Python2.4中,为这样的包装方法引入了一个叫做装饰器(decorators)的新语法(它能够对任何可调用的对象进行包装,即能够用于方法也能用于函数)。使用@操作符,在方法(或函数)的上方将装饰器列出,从而指定一个或者更多的装饰器(多个装饰器在应用时的顺序与指定顺序相反)

 1 __metaclass__ = type
 2
 3 class Myclass:
 4
 5 @staticmethod
 6 def smeth():
 7 print "This is a static method"
 8
 9 @classmethod
10 def cmeth(cls):
11 print "This is a class method of", cls

定义了这些方法后,就可以像下面的例子那样使用(例子中没有实例化类):

>>>Myclass.smeth()

This is a static method

>>>Myclass.cmeth()

This is a class method of <class ‘__main__.Myclass‘>

时间: 2024-10-29 04:29:16

静态方法和类成员方法(Python)的相关文章

Python的静态方法和类成员方法

http://www.cnblogs.com/2gua/archive/2012/09/03/2668125.html Python的静态方法和类成员方法都可以被类或实例访问,两者概念不容易理清,但还是有区别的: 1)静态方法无需传入self参数,类成员方法需传入代表本类的cls参数: 2)从第1条,静态方法是无法访问实例变量的,而类成员方法也同样无法访问实例变量,但可以访问类变量: 3)静态方法有点像函数工具库的作用,而类成员方法则更接近类似Java面向对象概念中的静态方法. 实现静态方法和类

Python中的静态方法与类成员方法区分

学习python过程中对类声明中的"静态方法"与"类成员方法"有过那么一丝混淆,简略总结了一下两者声明方式和功能上的异同,如下: # -*- coding:utf-8 -*- class Test(object): value1 = 'value1' #定义类变量value1 def __init__(self): self.value2 = 'value2' #在构造函数中定义实例变量value2 @staticmethod def method1() print

python中的静态成员方法和类成员方法

Python的静态方法和类成员方法都可以被类或实例访问,两者概念不容易理清,但还是有区别的: 1)静态方法无需传入self参数,类成员方法需传入代表本类的cls参数: 2)从第1条,静态方法是无法访问实例变量的,而类成员方法也同样无法访问实例变量,但可以访问类变量: 3)静态方法有点像函数工具库的作用,而类成员方法则更接近类似Java面向对象概念中的静态方法. 实现静态方法和类方法的两种方式 一.在Python 2.3及之前,用staticmethod和classmethod类型对象包装实现 例

分析特定类的python脚本

今天接触了下pyUSB,事先没看对象内部成员资料,直接用python的dir函数看了看pyUSB的内部构成.突然间想到自己可不可以写个简单的脚本,利用dir或其他函数遍历某个对象内部的所有成员,并打印出来成树状图的形式?于是写了如下对象分析程序: 使用方法 : import matplotlib.pyplot as plt import AnalysisClass m = AnalysisClass.AnalysisClass() m.analysisObject(plt.Arrow, 'plt

探讨PHP 静态变量 静态方法 初始化类的问题 哪种写法合格

class Main { static $service; public function __construct() { $this->getService ()->t (); $this->getService ()->t (); } public static function getService1() { return new Service ( "BB" ); } public static function getService2() { if (

矩阵类的python实现

科学计算离不开矩阵的运算.当然,python已经有非常好的现成的库:numpy. 我写这个矩阵类,并不是打算重新造一个轮子,只是作为一个练习,记录在此. 注:这个类的函数还没全部实现,慢慢在完善吧. 全部代码: 1 import copy 2 3 class Matrix: 4 '''矩阵类''' 5 def __init__(self, row, column, fill=0.0): 6 self.shape = (row, column) 7 self.row = row 8 self.co

词云wordcloud类介绍&amp;python制作词云图&amp;词云图乱码问题等小坑

词云图,大家一定见过,大数据时代大家经常见,我们今天就来用python的第三方库wordcloud,来制作一个大数据词云图,同时会降到这个过程中遇到的各种坑, 举个例子,下面是我从自己的微信上抓的微信好友签名,制作的词云图:看来用的做多的还是"方得始终"啊 首先我们需要几个库,pip完了导入 1 import chardet #检测字符类型的类 2 from wordcloud import WordCloud #词云库 3 import matplotlib.pyplot as pl

python:类5——Python 的类的下划线命名有什么不同?

首先是单下划线开头,这个被常用于模块中,在一个模块中以单下划线开头的变量和函数被默认当作内部函数,如果使用 from a_module import * 导入时,这部分变量和函数不会被导入.不过值得注意的是,如果使用 import a_module 这样导入模块,仍然可以用 a_module._some_var 这样的形式访问到这样的对象. 在 Python 的官方推荐的代码样式中,还有一种单下划线结尾的样式,这在解析时并没有特别的含义,但通常用于和 Python 关键词区分开来,比如如果我们需

mysqli_result类--成员方法

close()                释放内在并关闭结果集,一旦调用结果集就不可再使用了. data_seek()            明确改变当前结果记录顺序 fetch_field()            从结果集中获得某一个字段的信息 fetch_fields()            从结果集中获得全部字段的信息 fetch_field_direct()        从一个指定的列中获得类的详细信息,返回一个包含列信息的对象 fetch_array()