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

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

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

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

  • 如果要修改对象的属性值,就应该使用成员方法;
  • 如果要修改类属性的值,就应该使用类方法;
  • 如果是辅助功能,如打印或绘图,这时可以考虑使用静态方法,可以在不创建对象的前提下使用。
  • 6
    点赞
  • 63
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Python中,虽然没有完全静态的变量,但可以通过变量来实现似的功能。静态成员变量在Python中被称为变量,可以通过名直接访问,也可以通过实例对象来访问。变量在的定义中声明,并且在所有实例对象之间共享相同的值。 为了设置静态成员变量,需要在的定义中声明一个变量,并将其赋值为所需的值。这样,该变量就成为了变量,可以通过名或实例对象来访问。例如: ```python class MyClass: static_var = 10 # 静态成员变量 print(MyClass.static_var) # 通过名访问静态成员变量 my_obj = MyClass() print(my_obj.static_var) # 通过实例对象访问静态成员变量 ``` 输出: ``` 10 10 ``` 在上面的例子中,`static_var`被声明为变量,并赋值为10。然后,可以通过名或实例对象来访问这个静态成员变量。 需要注意的是,静态成员变量在所有实例对象之间共享相同的值。如果通过一个实例对象修改了静态成员变量的值,那么这个变化将会被所有实例对象所共享。 希望这个解答对你有帮助。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [python ——静态变量](https://blog.csdn.net/m0_61453287/article/details/122723562)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 50%"] - *2* *3* [Python 变量,成员变量,静态变量,局部变量](https://blog.csdn.net/BiBlioManiaa/article/details/106651285)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值