python中的静态方法和类方法
在python中,各种方法的定义如下所示:
class MyClass(object):
#在类中定义普通方法,在定义普通方法的时候,必须添加self
def foo(self,x):
print "this is a method %s %s" % (self,x)
#在类中定义静态方法,在定义静态方法的时候,不需要传递任何类的东西
@staticmethod
def static_method(x):
print "this is a static method: %s " % x
#在类中定义类方法,在定义类方法的时候,需要传递参数cls
@classmethod
def class_method(cls,x):
print "this is a class method: %s %s" %(cls,x)
1、 在定义普通方法的时候,需要的参数是self,也就是把类的实例作为参数传递给方法,如果在不写self的时候,会发现报错TypeError错误,表示传递参数多了,其实也就是在调用类方法的时候,将实例作为参数传递了。
在使用普通方法的时候,必须是使用实例来调用方法,不能使用类来调用方法,没有实例,那么方法将无法调用。
2、 在定义静态方法的时候,和模块中的方法没有什么不同,最大的不同就在于静态方法在类的命名空间之中,并且在声明静态方法的时候,使用的标记为@staticmethod,表示为静态方法,在调用静态方法的时候,可以使用类名或者是实例名来进行调用,一般使用类名来进行调用
静态方法主要是用来放一些方法,方法的逻辑属于类,但是又和类本身没有交互,从而形成了静态方法,主要是让静态方法放在此类的名称空间之内,从而能够更加有组织性。
3、 在定义类方法的时候,传递的参数为cls,表示为类,此写法也可以变,但是一般写为cls。类的方法调用可以使用类,也可以使用实例,一般的情况下是使用类。
4、 self表示为类型为类的object,而cls表示为类也就是class
5、在继承的时候,静态方法和类方法都会被子类继承。在进行重载类中的普通方法的时候,只要 写上相同的名字即可进行重载。
6、 在重载调用父类方法的时候,最好是使用super来进行调用父类的方法。
静态方法主要用来存放逻辑性的代码,基本在静态方法中,不会涉及到类的方法和类的参数。
类方法是在传递参数的时候,传递的是类的参数,参数是必须在cls中进行隐身穿
class Date(object):
day = 0
month = 0
year = 0 #define the init parameter
def __init__(self,day=0,month=0,year=0):
self.day = day
self.month = month
self.year = year #this is for the class method ,and the method is use parameter
#this must use the parameter of the self,this is for the object
def printf(self):
print "the time is %s %s %s " %(self.day,self.month,self.year) #this is define a classmethod,and the praemter have a cls,and can use the cls to create a class
#cls is passed of the class,then can initiate the object
@classmethod
def from_string(cls,date_as_string):
day,month,year = map(int,date_as_string.split("-"))
date1 = cls(day,month,year)
date1.printf() #this is the static method,and thre is do something to manage the logic,not the class or object
@staticmethod
def is_date_valid(date_as_string):
day,month,year = map(int,date_as_string.split("-"))
return day <= 31 and month <= 12 and year <= 3999
python中的静态方法和类方法的更多相关文章
- python中的静态方法、类方法、属性方法(福利:关于几种方法更好的解释)
该部分的三个属性都是高级方法,平时用的地方不是很多 一.静态方法 静态方法的使用不是很多,可以理解的就看一下,用的地方不是很多 class Dog(object): def __init__(self ...
- 【代码学习】PYTHON中的静态方法和类方法
一.类方法 是类对象所拥有的方法,需要用修饰器@classmethod来标识其为类方法,对于类方法,第一个参数必须是类对象,一般以cls作为第一个参数(当然可以用其他名称的变量作为其第一个参数,但是大 ...
- 第7.15节 Python中classmethod定义的类方法详解
第7.15节 Python中classmethod定义的类方法详解 类中的方法,除了实例方法外,还有两种方法,分别是类方法和静态方法.本节介绍类方法的定义和使用. 一. 类方法的定义 在类中定 ...
- 第7.16节 案例详解:Python中classmethod定义的类方法
第7.16节 案例详解:Python中classmethod定义的类方法 上节介绍了类方法定义的语法以及各种使用的场景,本节结合上节的知识具体举例说明相关内容. 一. 案例说明 本节定义的一个 ...
- python中的实例方法、类方法、静态方法的区别
Python 除了拥有实例方法外,还拥有静态方法和类方法,跟Java相比需要理解这个类方法的含义. class Foo(object): def test(self)://定义了实例方法 print( ...
- (转)关于python3中staticmethod(静态方法)classmethod(类方法)实例方法的联系和区别
原文:http://dmcoders.com/2017/08/30/pythonclass/ https://zhuanlan.zhihu.com/p/28010894------正确理解Python ...
- python——实例方法、静态方法、类方法、类变量和实例变量浅析
概述: 实例方法就是类的实例能够使用的方法. 静态方法是一种普通函数,就位于类定义的命名空间中,它不会对任何实例类型进行操作.使用装饰器@staticmethod定义静态方法.类对象和实例都可调用静态 ...
- 在python中使用静态方法staticmethod
静态方法: 静态方法是类中的函数,不需要实例.静态方法主要是用来存放逻辑性的代码,主要是一些逻辑属于类,但是和类本身没有交互,即在静态方法中,不会涉及到类中的方法和属性的操作.可以理解为将静态方法存在 ...
- python实例方法、静态方法和类方法
Python中至少有三种比较常见的方法类型,即实例方法,类方法.静态方法.它们是如何定义的呢?如何调用的呢?它们又有何区别和作用呢?且看下文. 首先,这三种方法都定义在类中.下面我先简单说一下怎么定义 ...
随机推荐
- nodpad++正则替换
则表达式是一个查询的字符串,它包含一般的字符和一些特殊的字符,特殊字符可以扩展查找字符串的能力,正则表达式在查找和替换字符串的作用不可忽视,它 能很好提高工作效率. EditPlus的查找,替换,文件 ...
- 关于请求添加HttpRequestHeader
WebClient w = new WebClient(); w.Headers.Add(HttpRequestHeader.Accept, "application/json") ...
- Windows7配置GPU和Theano编程环境
可参考Windows安装Theano官方教程: http://deeplearning.net/software/theano/install_windows.html#install-windows ...
- nova读取配置文件流程
在我们安装nova的过程中,设置它的配置文件/etc/nova/nova.conf是必不可少的一步.配置好nova.conf文件,nova-compute.nova-network等服务才 ...
- 【笔记】一些linux实用函数技巧【原创】
函数返回的是函数的地址 kallsyms_lookup_name()
- ubuntu完美搭建git服务器【转】
转自:http://blog.csdn.net/tommy_wxie/article/details/38779667 最近公司项目需要用到Git来管理项目,正好逢周末花了点时间在虚拟机的unbunt ...
- [HDOJ1160]FatMouse's Speed(DP)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1160 FatMouse believes that the fatter a mouse is, th ...
- java读取Properties文件
方法一.通过java.util.Properties读取 Properties p=new Properties(); //p需要InputStream对象进行读取文件,而获取InputStream有 ...
- POJ 1847 Tram【Floyd】
题意:给出n个站点,每个站点都有铁路通向其他站点 如果当前要走得路恰好是该站点的开关指向的铁路,则不用扳开关,否则要手动扳动开关,给出起点和终点,问最少需要扳动多少次开关 输入的第一行是n,start ...
- Windows上安装Yeoman
之前直接安装完Node.js后,运行npm install -g yo命令,结果出现什么"要安装framework2.0 sdk,vcbuild"什么的错误,怎么也弄不好,结果是各 ...