Python——类方法和静态方法

类方法和静态方法


类方法:

  1. 成员方法
  2. 普通方法
  3. 类方法
  4. 静态方法

成员方法由对象调用,方法的第1个参数默认是 self ,构造方法析构方法也属于成员方法;
普通方法即类中的函数,只能由类名调用;
类方法静态方法都属于类的方法。

1.类方法

语法:

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()

运行结果:
在这里插入图片描述

2.静态方法

语法:

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()

运行结果:
在这里插入图片描述

类的对象可以访问成员方法、类方法和静态方法,使用可以访问类方法和静态方法

成员方法、类方法和静态方法有什么区别:

  • 如果要修改对象的属性值,就应该使用成员方法;
  • 如果要修改类属性的值,就应该使用类方法;
  • 如果是辅助功能,如打印或绘图,这时可以考虑使用静态方法,可以在不创建对象的前提下使用。
  • 9
    点赞
  • 70
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值