成员方法由对象调用,方法的第1个参数默认是 self ,构造方法和析构方法也属于成员方法;
普通方法即类中的函数,只能由类名调用;
类方法和静态方法都属于类的方法。
语法:
class 类名:
@classmethod
def 类方法名(cls):
方法体
在上述格式中,类方法的第1个参数为 cls ,代表定义类方法的类,通过 cls 参数可以访问类的属性。要想调用类方法,既可以通过对象名调用,又可以通过类名调用,这两种方法没有任何区别。
例7-8类中定义的实例方法和类方法:
#ex0708.py 类中定义的实例方法和类方法
class DemoClass1:
def instancemethod(self): #实例方法
print("instance method")
@classmethod
def classmethod1(cls): #类方法
print("class method")
obj = DemoClass1()
obj.instancemethod()
obj.classmethod1()
DemoClass1.classmethod1()
运行结果:
需要注意的是,类方法是无法访问成员变量的,但是可以访问类变量。
例7-9类方法的应用:
#ex0709.py 类方法的应用
class DemoClass2:
def __init__(self,year=0,month=0,day=0): #构造方法
self.day = day
self.mobth = month
self.year = year
@classmethod
def get_date(cls,string_date): #类方法
#第一个参数cls,表示调用当前的类名
year,month,day=map(int,string_date.split('-'))
date1=cls(year,month,day) #调用构造方法
return date1 #返回的是一个初始化后的类
def output_date(self): #成员方法
print("year:",self.year,"month:",self.mobth,"day:",self.day)
rq1 = DemoClass2(2018,6,2)
rq1.output_date()
rq2 = DemoClass2.get_date("2018-6-6")
rq2.output_date()
语法:
class 类名:
@staticmethod
def 静态方法名():
方法体
在上述格式中,静态方法的参数列表中没有任何参数。
由于静态方法没有 self 参数,所以它无法访问类的成员变量;
静态方法也没有 cls 参数,所以它也无法访问类变量。
静态方法跟定义它的类没有直接的关系,只是起到类似函数的作用。
要想使用静态方法,既可以通过对象名调用,也可以通过类名调用,二者没有任何区别。
例7-10静态方法的应用:
#ex0710.py 静态方法的应用
class DemoClass3:
def instancemethod(self): #成员方法
print("instance method")
@staticmethod
def staticmethod1(): #静态方法
print("static method")
obj = DemoClass3()
obj.instancemethod()
obj.staticmethod1()
DemoClass3.staticmethod1()
类的对象可以访问成员方法、类方法和静态方法,使用类可以访问类方法和静态方法。
成员方法、类方法和静态方法有什么区别: