您的位置:首页 > 编程语言 > Python开发

python中的静态方法和类方法

2016-03-19 13:51 721 查看
在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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: