Python进阶之路 静态方法和类方法

静态方法和类方法

Python类包含三种方法:实例方法、静态方法和类方法。其中,实例方法在前面的章节已经多次使用了。要想调用实例方法,必须要实例化类,然后才可以调用。也就是说,调用实例化方法需要类的实例(对象)。而静态方法在调用时根本不需要类的实例(静态方法不需要self参数),这一点和其他编程语言完全一样。

类方法的调用方式与静态方法完全一样,所不同的是,类方法与实例方法的定义方式相同,都需要一个self参数,只不过这个self参数的含义不同。对于实例方法来说,这个self参数就代表当前类的实例,可以通过self访问对象中的方法和属性。而类方法的self参数表示类的元数据,也就是类本身,不能通过self参数访问对象中的方法和属性,只能通过这个self参数访问类的静态方法和静态属性。

定义静态方法需要使用@staticmethod装饰器(decorator),定义类方法需要使用@classmethod装饰器。

class Myclass:
    # 实例方法
    def instancemethod(self):
        pass
    # 静态方法
    @staticmethod
    def staticmethod():
        pass
    # 类方法
    @classmethod
    def classmethod(self):
        pass

[例 10.9] 本例演示了如何定义实例方法、静态方法和类方法,并演示了如何调用这些方法

class Myclass:
    # 定义一个静态变量,可以被静态方法和类方法访问
    name = 'Bill'
    def __init__(self):
        print('Myclass的构造方法被调用')
        # 定义实例变量,静态方法和类方法不能访问该变量
        self.value = 20
    # 定义静态方法
    @staticmethod
    def run():
        # 访问Myclass类中的静态变量name
        print('*', Myclass.name, '*')
        print('Myclass的静态方法run被调用')

    # 定义类方法
    @classmethod
    # 这里self是类的元数据,不是类的实例
    def do(self):
        print(self)
        # 访问Myclass类中的静态变量name
        print('[', self.name, ']')
        print('调用静态方法run')
        self.run()
        # 在类方法中不能访问实例变量,否则会抛出异常(因为实例变量需要用类的实例访问) print(self.value)
        print('成员方法do被调用')
    # 定义实例方法
    def do1(self):
        print(self.value)
        print('<', self.name, '>')
        print(self)
# 调用静态方法run
Myclass.run()
# 创建Myclass类的实例
c = Myclass()
# 通过类的实例也可以调用类方法
c.do()
# 通过类访问类的静态变量
print('Myclass2.name', '=', Myclass.name)
# 通过类调用类方法
Myclass.do()
# 通过类的实例访问实例方法
c.do1()

输出结果:

* Bill *
Myclass的静态方法run被调用
Myclass的构造方法被调用
<class '__main__.Myclass'>
[ Bill ]
调用静态方法run
* Bill *
Myclass的静态方法run被调用
成员方法do被调用
Myclass2.name = Bill
<class '__main__.Myclass'>
[ Bill ]
调用静态方法run
* Bill *
Myclass的静态方法run被调用
成员方法do被调用
20
< Bill >
<__main__.Myclass object at 0x10d5bcd30>

从实例方法、静态方法和类方法的调用规则可以得出以下结论:

通过实例定义的变量只能被实例方法访问,而直接在类中定义的静态变量(如本例的name变量)即可以被实例方法访问,也可以被静态方法和类方法访问。实例方法不能被静态方法和类方法访问,但静态方法和类方法可以被实例方法访问。

  • 31
    点赞
  • 205
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
Python中的类方法静态方法是在类级别上执行操作的工具。类方法可以使用类的属性和方法,而静态方法则不能。使用这些方法可以更好地组织代码,并提高代码的可读性和可维护性。\[2\] 类方法是定义在类上的方法,可以通过类或类的实例来调用。类方法使用@classmethod装饰器行标识,它的第一个参数是类本身,通常被命名为"cls"。类方法可以访问类的属性和方法,并且可以在类的实例化之前或之后执行一些操作。\[1\] 静态方法也是定义在类上的方法,可以通过类或类的实例来调用。静态方法使用@staticmethod装饰器行标识,它不需要类或实例作为第一个参数。与类方法不同,静态方法不能访问类或实例的属性和方法静态方法通常用于定义与类无关的辅助函数,或者在不需要访问类的属性和方法时执行一些操作。\[3\] 总结来说,类方法静态方法都是在类级别上执行操作的方法,但类方法可以访问类的属性和方法,而静态方法不能。选择使用哪种方法取决于具体的情况,如果需要访问类的属性和方法,则使用类方法,如果不需要访问类的属性和方法,则使用静态方法。\[2\] #### 引用[.reference_title] - *1* [Python 实例方法、类方法静态方法](https://blog.csdn.net/lihao21/article/details/79762681)[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^v91^insert_down28v1,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* *3* [Python-类方法静态方法](https://blog.csdn.net/weixin_44412085/article/details/129968953)[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^v91^insert_down28v1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值